一套小程序代码两个appid,dev和prod的是如何管理的

2022-08-10  本文已影响0人  Yinzhishan

问题:

我们在开发小程序使用的taro,有三套环境,两个小程序账号,
test小程序负责dev和test环境;
prod小程序负责prod环境;
体验版和正式版使用同样的域名,同一套环境;
每次启动和发布的时候,都手动切换appid,有些不安全且不方便管理。

解决方法:

于是就想到利用node的fs模块,根据启动命令,动态修改config文件的appid。以实现切换小程序的功能。
如果是其他框架或者原生,也可以使用这种手段,道理是相同的。

  1. 添加启动命令
 "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"
  },
  1. 使用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();

上一篇下一篇

猜你喜欢

热点阅读