1:先 npm install --save-dev cross-env
2:再修改package 的scripts
"scripts": { "dev": "cross-env env_config=dev webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ", "build": "cross-env env_config=prod node build/build.js", "build-test": "cross-env env_config=test node build/build.js" },
3:再修改 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' module.exports = { NODE_ENV: '"production"', env_config:JSON.stringify(process.env.env_config) }
注意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中的一个全局变量。
https://segmentfault.com/a/1190000011683741
我的理解应该是只有在node环境构建的时候才有效,process.env.NODE_ENV一定是webpack又做了什么配置
最后就是配合自己的config.js做请求前缀的区分
/**
* 配置本地开发、线上测试、线上生产的接口前缀
*
* **/
//开发接口前缀
//若使用代理 修改ip需要到 config/index.js修改
//通过proxyTable来跨域请求本地接口
// const devHost = '/apiProxy_local'
const devHost = '/apiProxy_online'
//const devHost = "//192.168.119.120:9142";
//测试接口前缀
const testHost = "//192.168.119.120:9142";
//生产接口前缀
const proHost = "//resume.51app.cn/resumeapi";
let host;
//通过process.env.env_config 来区分 开发dev、测试test、生成prod环境
switch(process.env.env_config) {
case 'dev':
host = devHost
break;
case 'test':
host = testHost
break;
case 'prod':
host = proHost
break;
default:
host = proHost
break;
}
export {
host
};
参考:
vue正式环境与测试环境压包配置方法(vue-cli 2.0) 主要参考这个
关于package.json中的scripts命令运行说明