实现思路:
- 通过脚本执行命令实现
- nodejs读写对应文件数据进行修改
- 执行不同命令,运行不同环境,修改不同的数据值
实现步骤:
- 安装
package.json
npm init
配置对应的环境命令 NODE_ENV=‘sit’ 即为当前环境是sit
"scripts": {
"dev": "set NODE_ENV='sit' && node script.env.js",
"uat": "set NODE_ENV='uat' && node script.env.js",
"prod": "set NODE_ENV='prod' && node script.env.js",
"mac:dev": "export NODE_ENV='sit' && node script.env.js",
"mac:uat": "export NODE_ENV='uat' && node script.env.js",
"mac:prod": "export NODE_ENV='prod' && node script.env.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
- 在
utils
文件目录新建一个config.js
用于配置或写入环境变量(可以创建一个空文件,具体写入可在第3步中配置)
module.exports.title = '环境-sit';
module.exports.baseURL = 'sit环境url地址';
- 新建一个
script.env.js
脚本执行文件,即node命令配置的node script.env.js
const fs = require('fs'); //引入nodejs fs文件模块
// 写文件
const writeFile = (path, data) => {
// process.cwd()方法是流程模块的内置应用程序编程接口,用于获取node.js流程的当前工作目录。
fs.writeFile(`${process.cwd()}${path}`, data, (err) => {
if (err) throw err;
});
}
//配置信息
const CONFIG = {
//测试环境
'sit': {
title: '环境-sit',
baseURL: 'sit环境url地址',
},
'uat': {
title: '环境-uat',
baseURL: 'uat环境url地址',
},
// 生产环境
'prod': {
title: '环境-prod',
baseURL: 'prod环境url地址'
}
}
const env = process.env.NODE_ENV.replace(/\'/g, '').replace(' ', ''); //当前执行环境
const ITEM = CONFIG[env]; //当前环境的配置信息
// 修改project.config.json里面的appid
// fs.readFile(`${process.cwd()}/project.config.json`, (err, data) => {
// if (err) throw err;
// let _data = JSON.parse(data.toString());
// _data.appid = ITEM.appid;
// writeFile(`/project.config.json`, JSON.stringify(_data, null, 2));
// });
let configString = '';
Object.keys(ITEM).forEach(key => {
configString += `module.exports.${key} = '${ITEM[key]}';\n`;
})
// 自动写入需要配置的config.js文件
writeFile(`/miniprogram/utils/config.js`, configString);
- 每次想要切换环境时,只需要输入对应命令就可以了
npm run dev //sit环境
npm run uat //uat环境
npm run prod //正式环境
非常感谢,写的很好,一个可以优化的点是mac不用新命令,获取命令参数即可,参考https://juejin.cn/post/6844904178779717645