在项目开发一直到上线的过程中,我们一般会配置至少三个环境(开发环境 dev、测试环境 test、生产环境prod)
1.根目录下新建三个环境的配置文件,.env.development
(开发环境).env.test
(测试环境).evn.production
(生产环境)
2、开发环境 .env.development
NODE_ENV = 'development' # 开发环境,api前缀 VUE_APP_BASE_API = '/api' #开发环境,Url地址 VUE_APP_BASE_RUL = 'http://xxxxxxxxxxxxx:8081/
测试环境 .env.test
# 测试环境 NODE_ENV = 'test' # 测试环境,api前缀 VUE_APP_BASE_API = '/test-api' #测试环境,Url地址 VUE_APP_BASE_RUL = 'http://xxxxxxxxxxx:8081/'
生产环境 .env.production
# 生产环境 NODE_ENV = 'production' # 生产环境,api前缀 VUE_APP_BASE_API = '/prod-api' #生产环境,Url地址 VUE_APP_BASE_RUL = 'http://xxxxxxxxxx:8081/'
3、vue.config.js
配置
// webpack-dev-server 相关配置 devServer: { // 设置代理 host: '0.0.0.0', // port: 80, //自定义端口 https: false, //false关闭https,true为开启 open: true, //自动打开浏览器 proxy: { [process.env.VUE_APP_BASE_API]: { target: process.env.VUE_APP_BASE_RUL, // 如果要代理 websockets ws: true, changeOrigin: true, pathRewrite: { //重写路径,这种是没有我们定义的前缀 ['^' + process.env.VUE_APP_BASE_API]: '' } } } },
4、package.json
配置打包、启动
"serve": "vue-cli-service serve", //启动 "build:test": "vue-cli-service build --mode test", //测试 "build:prod": "vue-cli-service buil
5、封装了axios
的话,在axios
配置的基地址里面就直接写上动态的地址就可以了
let request = axios.create({ baseURL: process.env.VUE_APP_URL, responseType: "json", timeout: 60000, });
这里需要注意的是,在vue.config.js中配置了proxy跨域后执行npm run build打包部署到服务器上会报跨域问题。为什么会报错呢?因为编译打包后,前端页面成为了单独的静态资源,代理服务器devServer.proxy被抽离出去了。
也就是说,devServer.proxy不会一起打包到dist文件夹下,所以相当于我们没有配置代理服务器!!
怎么解决呢?资源要被访问,那必须要有一个代理服务器来装载它。我们部署上线最常见的就是使用nginx进行反向代理,只需要修改nginx配置文件即可。
location ^~/api/ { proxy_pass http://xxx.xxx.xxx.xxx:8889/api/; }