一、vue3.x

1.配置全局环境变量:
  在项目根目录创建配置文件:.env、.env.development、.env.production、.env.test

  说明:
  .env 无论开发环境还是生成环境都会加载这个文件
  .env.development 开发环境自动加载这个文件
  .env.production 生成环境自动加载这个文件
此外,env 文件需要声明运行的环境,且定义变量需要以 VUE_APP_ 作为前缀。

.env.development文件:

//.env.development
NODE_ENV = development
VUE_APP_BASE_URL = http://dev.myhost.com

.env.production文件:

//.env.production
NODE_ENV = production
VUE_APP_BASE_URL = http://myhost.com

.env.test文件:

//.env.test
NODE_ENV = test
VUE_APP_BASE_URL = http://test.myhost.com

2.配置package.json来启动不同的命令

"scripts": {
    "dev": "vue-cli-service serve",//默认加载.env.development
    "test": "vue-cli-service serve --mode test",//加载.env.test
    "pro": "vue-cli-service serve --mode production",//加载.env.production
   "build": "vue-cli-service build",//默认加载.env.production
"build:dev": "vue-cli-service build --mode dev",//加载.env.development "build:test": "vue-cli-service build --mode test",//加载.env.test },

二、vue2.x

1.项目安装cross-env。cross-env是node的一个设置和使用环境变量的脚本:npm install cross-env -D

2.在根目录的package.json文件中,把scripts对象的build字段的值改为以下代码。

"scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "cross-env env_config=prod node build/build.js",
    "build:test": "cross-env env_config=test node build/build.js",
    "build:pre": "cross-env env_config=pre node build/build.js"
},

代码说明:我们使用了cross-env脚本,新增了一个全局变量:env_config。后面根据这个全局变量的值,调用不同开发环境的变量值。调用方式:process.env.env_config。

3,修改控制台提示语句:在根目录的build/build.js文件内找到const spinner = ora('building for production...')这行代码,将其改为const spinner = ora('正在打'+process.env.env_config+'环境包...'),方便打包的时候知道正在打哪个环境的包。

4.在根目录的/config/prod.env.js文件内,为不同环境创建不同变量值。

'use strict'
module.exports = {
  prod: {
    NODE_ENV: '"production"',
    API_URL: '"生产环境接口url访问地址"'
  },
  test: {
    NODE_ENV: '"test"',
    API_URL: '"测试环境接口url访问地址"'
  },
  pre: {
    NODE_ENV: '"pre"',
    API_URL: '"预发布环境接口url访问地址"'
  },
}

5.修改.env的访问地址,以调用对应环境的变量,在根目录的/build/webpack.prod.conf.js文件内找到

//找到以下代码
new webpack.DefinePlugin({
  'process.env': env
})
//修改为如下,不再直接访问.env,而是访问.env下对应环境变量名的变量值
new webpack.DefinePlugin({
  'process.env': env[process.env.env_config]
})

vue2.x根据不同命令打出不同环境的包就完成了,接下来打包即可。

三、其它方式

其实也可以直接通过判断当前域名,改变全局变量的值,能实现一个dist包适应多个开发环境。代码示例:

//在全局js文件中,创建全局变量,之后直接引用即可
// 域名常量
const _const = {
  apiUrl: '生产环境服务器接口地址'
}
// 通过域名判断当前环境
if(location.host === '测试环境域名' || location.host.indexOf('localhost')>-1) {
  _const.apiUrl = '测试环境服务器接口地址';// 测试环境服务器接口地址
}
if(location.host === '预发布环境域名') {
  _const.apiUrl = '预发布环境服务器接口地址';// 预发布环境服务器接口地址
}

export default {
  _const: _const
}

这个写法不太符合代码规范,以后接手你代码的人会一头雾水,他在.env文件中会找不到开发环境的变量。所以需要在.env文件中写上注释:

'use strict'
module.exports = {
  NODE_ENV: '"production"',
  // API_ROOT: '',//域名url等作为常量,存放于根目录该文件下:src/util/common.js。第1行
}