主要思路
- 配合cross-env工具包,通过命令行设置NODE_ENV,控制加载对应的环境js;
- 结合webpack的new webpack.DefinePlugin定义的全局变量process.env**【当前这个是自定义的】**,使用到需要的vue组件当中;
具体实现
安装cross-env
设置和使用跨平台环境变量的脚本
npm install --save-dev cross-env
配置脚本命令
修改项目中的package.json
{..."scripts": {..."build": "cross-env NODE_ENV=production node build/build.js","build--huaweicloud": "cross-env NODE_ENV=huaweicloud node build/build.js","build--prod": "cross-env NODE_ENV=production node build/build.js"}}
说明:设置环境变量,通过npm run XXXX对应的命令起效;
修改打包文件
…/build/build.js

修改部分:
'use strict'require('./check-versions')()// process.env.NODE_ENV = 'production'const ora = require('ora')const rm = require('rimraf')const path = require('path')const chalk = require('chalk')const webpack = require('webpack')const config = require('../config')const webpackConfig = require('./webpack.prod.conf')// const spinner = ora('building for production...')const spinner = ora(`building for ${process.env.NODE_ENV} mode...` )spinner.start()
…/build/webpack.prod.conf.js

修改部分:
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')const UglifyJsPlugin = require('uglifyjs-webpack-plugin')// const env = process.env.NODE_ENV === 'testing' ? require('../config/test.env') : require('../config/prod.env')// 指定加载的文件,确定对应变量let curEnvPath = `../config/${process.env.NODE_ENV}.env.js`const env = require(curEnvPath)
作用:加载的js,最终new webpack.DefinePlugin会生成到自定义的全局变量里面保存着
…/config/…
修改当前目录下的文件,或者添加对应的需要的环境的js
// 添加一个新的环境的jshuaweicloud.env.js// 修改原prod.env.js,因为前面是根据配置的NODE_ENV的变量来匹配production.env.js
注意:因为修改prod.env.js成production.env.js,其他文件内容对这个文件的引用的需要作出调整,例如:dev.env.js
…/config/dev.env.js
'use strict'const merge = require('webpack-merge')const prodEnv = require('./production.env')module.exports = merge(prodEnv, {NODE_ENV: '"development"',// 开发环境ZZ_API: '"http://123.12.1.12:1234"',applicationCode: '"XX_XXXX_XX"'})
…/config/huaweicloud.env.js
'use strict'module.exports = {NODE_ENV: '"huaweicloud"',// 生产环境-华为云ZZ_API: '"http://100.0.0.111:88"',applicationCode: '"YY_YY_YY"'}
…/config/production.env.js
'use strict'module.exports = {NODE_ENV: '"production"',// 生产环境-公司ZZ_API: '"http://172.11.1.11:1111"',applicationCode: '"ZZ_ZZZZ_ZZ"'}
应用
直接应用到想要的位置上面去,因为是全局变量
// code: "WF_FRAME_ATTACH_MD_XXZX_OA",code: `WF_FRAME_ATTACH_${process.env.applicationCode}`,// 业务大类busiId: "WORKFLOW_INSTANCE",// 业务小类busiModule: "FRAME_ATTACH",// 必填busiType: "",creator: "",tenantCode: "GDSXXZX",// 必填sysCodeapplicationCode: `${process.env.applicationCode}`,
就这样子,算是结束了,有问题欢迎继续交流~~
