问题:
我们在开发小程序使用的taro,有三套环境,两个小程序账号,
test小程序负责dev和test环境;
prod小程序负责prod环境;
体验版和正式版使用同样的域名,同一套环境;
每次启动和发布的时候,都手动切换appid,有些不安全且不方便管理。
解决方法:
于是就想到利用node的fs模块,根据启动命令,动态修改config文件的appid。以实现切换小程序的功能。
如果是其他框架或者原生,也可以使用这种手段,道理是相同的。
- 添加启动命令
"scripts": {
"publish:weapp:prod": "cross-env APP_ENV_TYPE=prod npm run build:weapp:prod",
"build:weapp:prod": "npm run set:prod && npm run build:weapp && npm run set:test",
"build:weapp:test": "npm run set:test && npm run build:weapp",
"build:weapp": "taro build --type weapp",
"set:prod": "cross-env APP=prod node ./appid/index.js",
"set:test": "cross-env APP=test node ./appid/index.js",
"dev:weapp:prod": "npm run set:prod && cross-env APP_ENV_TYPE=prod npm run build:weapp -- --watch",
"dev:weapp": "npm run set:test && npm run build:weapp -- --watch",
"prepare": "husky install",
"lint:css": "stylelint src/**/*.{css,sass,scss} --fix",
"lint:eslint": "eslint src/**/*.{ts,tsx,js,jsx} --fix"
},
- 使用node的fs模块,动态修改小程序的appid
const fs = require('fs');
const path = require('path');
const { readFileSync, writeFileSync } = fs;
const AppConfig = {
prod: {
appId: 'wx233466'
},
test: {
appId: 'wx288234'
}
};
// 配置文件路径
const configFilePath = path.join(__dirname, '../project.config.json');
const configSampleFilePath = path.join(
__dirname,
'../project.config.sample.json'
);
const app = process.env.APP;
// 读取样例文件,替换appid,生成正式project.config.json文件
const setAppId = () => {
const option = { encoding: 'utf-8' };
const fileContent = readFileSync(configSampleFilePath, option);
const config = JSON.parse(fileContent.toString());
const appId = AppConfig[app || 'test'].appId;
console.log('appId = ', appId);
config.appid = appId;
const newContent = JSON.stringify(config, null, 2);
writeFileSync(configFilePath, newContent, option);
};
setAppId();