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

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

作者: Yinzhishan | 来源:发表于2022-08-10 14:02 被阅读0次

    问题:

    我们在开发小程序使用的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();
    
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/cafxwrtx.html