在Vue-cli3中 区分环境打包

在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。

以下就是具体的实现分包步骤:

  1. 在package.json中添加打包命令:
 	"build:prod": "vue-cli-service build", 
    "build:stage": "vue-cli-service build --mode staging",

npm run build:prod打包出来的是生成环境的包,npm run build:stage打包的是测试环境的包。

  1. 在项目根目录添加文件“.env.development”、“.env.production”、“.env.staging” (注意:这里.env.xx的命名要和package.json中–mode xx的名字一样!!不然webpack是无法识别的)

.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会根据你不同的命令,给出你设置不同的值,这样子我们就可以分包处理了。

你可能感兴趣的:(vue,webpack)