在vue-cli3的项目中,
npm run serve时会把process.env.NODE_ENV设置为‘development’;
npm run build 时会把process.env.NODE_ENV设置为‘production’;
此时只要根据process.env.NODE_ENV设置不同请求url就可以很简单的区分出本地和线上环境。
头疼的是打包时线上环境可能分多种,比如测试环境和生产环境等等。
在vue-cli2中打包时可以修改 “build” 和 “config”中的文件来区分不同的线上环境
而vue-cli3号称0配置,无法直接修改打包文件,那么怎么区分不同的线上环境呢? 也就是说npm run build时怎么手动更改process.env.NODE_ENV?
注意:
其实通过改变process.env.NODE_ENV值区分打包环境是有问题的,因为webpack打包时针对process.env.NODE_ENV===‘production’和其他情况打出来的包结构和大小都不一样;所以我们打出来的包的NODE_ENV都应该是production。
以下就是具体的实现分包步骤:
"build:prod": "vue-cli-service build",
"build:stage": "vue-cli-service build --mode staging",
npm run build:prod
打包出来的是生成环境的包,npm run build:stage
打包的是测试环境的包。
.env.development和.env.production其实是vue-cli3中自带的,所以不需要设置NODE_NEV,而staging是我们新增的,所以需要设置
.env.development代码
#以下的值webpack会根据不同的环境取得不同的值,使用方法:process.env.
#设定一个标题,代表这个环境是development
VUE_APP_TITLE = 'development'
# 打包文件的名字
VUE_APP_FILE_Name = 'dist'
#文件地址
VUE_APP_BUILD_PATH = '/'
# 区分v2的测试和生产外链 使用方法:process.env.VUE_APP_EXTERNAL_LINK
VUE_APP_EXTERNAL_LINK = 'https://www.baidu.com'
.env.production代码:
#以下的值webpack会根据不同的环境取得不同的值,使用方法:process.env.
#设定一个标题,代表这个环境是production
VUE_APP_TITLE = 'production'
# 打包后文件夹的名字
VUE_APP_FILE_Name = 'dist'
#打包后的文件地址
VUE_APP_BUILD_PATH = '/uduhs-web-page/'
# 区分v2的测试和生产外链 使用方法:process.env.VUE_APP_EXTERNAL_LINK
VUE_APP_EXTERNAL_LINK = 'https://www.taobao.com'
.env.staging代码:
NODE_ENV = production
#以下的值webpack会根据不同的环境取得不同的值,使用方法:process.env.
#设定一个标题,代表这个环境是staging
VUE_APP_TITLE = 'staging'
# 打包后文件夹的名字
VUE_APP_FILE_Name = 'staging'
#打包后的文件地址
VUE_APP_BUILD_PATH = '/uduhs-web-page/'
# 区分v2的测试和生产外链 使用方法:process.env.VUE_APP_EXTERNAL_LINK
VUE_APP_EXTERNAL_LINK = 'https://www.baidu.com'
然后我们在vue.config.js中测试一下是否有效,比如,我们设置打包后的地址和打包后的文件夹名字
module.exports = {
publicPath: process.env.VUE_APP_BUILD_PATH, // 打包后的文件地址
outputDir: process.env.VUE_APP_FILE_Name, // 打包的文件夹名字
}
设置好后,我们来测试一下,我先运行npm run build:prod
打包后的文件名字为:
然后我们运行npm run build:stage的时候,打包的文件夹名字为:
然后,我们在测试一下,在development和stageing命名下的VUE_APP_EXTERNAL_LINK
的值是:
console.log(process.env.VUE_APP_EXTERNAL_LINK)
而我运行命令:npm run build:prod,把包放在服务器上是,打印出的值是:
可以看到,webpack会根据你不同的命令,给出你设置不同的值,这样子我们就可以分包处理了。