Vue.js分环境打包到部署-并用nginx代理请求后端接口
1.Vue.js分环境打包vue.js分环境打包(vue-cli2.0),主要应对开发环境和生产环境请求后端地址ip不同,避免每次打包需要反复修改baseUrl的问题,根据npm run dev / npm build 打包生成不同baseUrl 配置。打开config目录分别修改以下两个文件如下:dev.env.js 开发环境'use strict'const merge = req...
1.Vue.js分环境打包
vue.js分环境打包(vue-cli2.0),主要应对开发环境和生产环境请求后端地址ip不同,避免每次打包需要反复修改baseUrl的问题,根据npm run dev / npm build 打包生成不同baseUrl 配置。
打开config目录
分别修改以下两个文件如下:
dev.env.js 开发环境
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
VN_CONFIG: '"dev"',
API_ROOT: '"//192.168.2.2:8080"'
})
prod.env.js 生产环境
'use strict'
module.exports = {
NODE_ENV: '"production"',
//添加
API_ROOT: '"//12.35.35:80"'
}
[注:此处ip不可用][1].
在开发的过程中在使用axios的文件下使用
axios.defaults.baseURL = process.env.API_ROOT;
这样在调用接口时就可以直接写成这样,不用重复的在前面拼上baseURL了
getInfoDetailFn(eventId){
return fetch(`/api/v1/events/${eventId}/detail`)
},
[注:在开发过程中都会将axios进行封装,接口请求统一管理,这样就不需要反复的引用][4]
2.nginx 代理请求后端接口
在实际的应用场景中,在生产环境下,前端大多使用nginx作为静态资源服务器.
现在有这样一个需求,前端代码打包成功好以后,直接扔到nginx上项目任然可以正常运行,无需配置baseURL,让nginx代理发送请求。
同样打开config目录下prod.env.js
'use strict'
module.exports = {
NODE_ENV: '"production"',
//添加
API_ROOT: '""'
}
我们将API_ROOT对应的ip删除,这样我们打包成功之后的代码放到nginx上。
比如:nginx地址为[localhost:3000][4],因为我们将生产环境下baseURL删除并未配置,这时当我们请求接口时将为这样
这样我们就可以通过简单配置下nginx 拦截这样的请求,为我们做一次代理,请求正真的后端地址。
安装nginx点击这里下载安装
进入nginx安装目录下 => conf 打开 nginx.conf文件(nginx配置文件)
新增配置
server {
listen 9090; # nginx监听端口
root D:/source/dist; # vue.js前端代码打包存放目录
location = /login.htm { # 后端接口不以api开头需单独配置拦截代理
proxy_pass http://192.168.1.5:8080/login.htm;
}
location ^~ /api/ { #以api开头的接口统一拦截代理
proxy_pass http://192.168.1.5:8080;
}
}
[注:#号后为注释]
这样我们就完成了利用nginx代理发送请求了。
3.但是我们仔细测试发现还有个问题,就是我们刷新页面后发现会出现404找不到资源
造成这样的原因是,Vue项目是一个单页应用,vue-router 是根据网址的不同动态的用js渲染页面,比如我们在项目中这样一个目录下刷新 [localhost:3000/test] 其实在我们正真的资源目录下并不存在这样一个目录,这也就是导致刷新后404的原因
因此需要rewrite到index.html中,然后交给路由在处理请求资源
具体配置如下(在上面的配置中添加)
server {
listen 9090;
root D:/source/dist;
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
location /images/ {
proxy_pass http://10.5.0.143/images/;
}
location = /login.htm {
proxy_pass http://10.5.6.54:8080/login.htm;
}
location ^~ /api/ {
proxy_pass http://10.5.6.54:8080;
}
}
这样我们就解决了刷新404的问题,nginx 还有很多配置,允许跨域等等,本人也是近期接触这个,代码虽然不多但挺实用的。
更多推荐
所有评论(0)