主要思路
- 配合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
// 添加一个新的环境的js
huaweicloud.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",
// 必填sysCode
applicationCode: `${process.env.applicationCode}`,
就这样子,算是结束了,有问题欢迎继续交流~~