vue配置开发、测试、类生产、生产环境,package scripts

430 阅读1分钟
  1. 先 npm install --save-dev cross-env
  2. 再修改package 的scripts
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "lint": "eslint --ext .js,.vue src",
    "build-dev": "cross-env env_config=dev 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",
    "build-prod": "cross-env env_config=prod node build/build.js"
  }
  1. 再修改 config/dev.env.js和config/prod.env.js
config/dev.env.js
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  env_config:JSON.stringify(process.env.env_config)
})


config/prod.env.js
'use strict'
let env_config = JSON.stringify(process.env.env_config),
	BASE_API, BASE_API_AXIOS;

if (env_config == '"dev"') {
	BASE_API = '"http://h5dev.app.cn/#"'; // 开发环境【H5】
	BASE_API_AXIOS = '"http://apidev.app.cn"'; // 开发环境【接口】
} else if (
	env_config == '"test"'
) {
	BASE_API = '"http://h5test.app.cn/#"'; // 测试环境【H5】
	BASE_API_AXIOS = '"http://apitest.app.cn"'; // 测试环境【接口】
} else if (
	env_config == '"pre"'
) {
	BASE_API = '"http://h5pre.app.cn/#"'; // 预发布环境【H5】
	BASE_API_AXIOS = '"http://apipre.app.cn"'; // 预发布环境【接口】
} else if (
	env_config == '"prod"'
) {
	BASE_API = '"http://h5.app.cn/#"'; // 生产环境【H5】
	BASE_API_AXIOS = '"http://api.app.cn"'; // 生产环境【接口】
}

module.exports = {
	NODE_ENV: '"production"',
	BASE_API,
	BASE_API_AXIOS,
}

注意process.env.env_config需要再套一层引号

  1. 至此就可以再src的文件里用到process.env.env_config变量了
  2. 遇到的问题,配置了packagescriptsprocess.env.env_config,以为可以和process.env.NODE_ENV一样那里都能用,但是只能在webpack.base.conf.js等文件用检测到,在src的文件里用不到,一定是webpack做了什么设置,后查到config/dev.env.jsconfig/prod.env.js的设置,就把env_config加了进去。

process(进程)其实就是存在nodejs中的一个全局变量。 segmentfault.com/a/119000001…

我的理解应该是只有在node环境构建的时候才有效,process.env.NODE_ENV一定是webpack又做了什么配置