- 先 npm install --save-dev cross-env
- 再修改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"
}
- 再修改 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需要再套一层引号
- 至此就可以再
src
的文件里用到process.env.env_config
变量了 - 遇到的问题,配置了
package
的scripts
后process.env.env_config
,以为可以和process.env.NODE_ENV
一样那里都能用,但是只能在webpack.base.conf.js
等文件用检测到,在src
的文件里用不到,一定是webpack做了什么设置,后查到config/dev.env.js
和config/prod.env.js
的设置,就把env_config
加了进去。
process(进程)其实就是存在nodejs中的一个全局变量。 segmentfault.com/a/119000001…
我的理解应该是只有在node环境构建的时候才有效,process.env.NODE_ENV
一定是webpack又做了什么配置