评论

编译前预处理config文件,切换环境

通过编译前预处理的脚本,快速的切换项目环境。

背景:

  1. 小程序项目有“开发版,QA版,QAP版,正式版”多个环境,每个环境都与多个服务器有交互。
  2. 其中部分服务器访问需要basic认证。
  3. 因为一些特殊原因,basic密匙现在阶段只能写在前端。但是又规定git上的代码中不能有密匙明文。
  4. 以上问题导致切换环境时,HOST URL和其他常量能够自动切换,但是HOST URL对应的basic认证密匙,必须手动填写。开发过程如果频繁切换环境的话会非常繁琐。版本发布时,也需要手动补全basic密匙,风险较高。

解决方案:

发现开发者工具有自定义处理命令的功能,在编译前可以对文件预处理。
基于这个功能尝试了在每次编译前,使用脚本修改config.js文件。而脚本存储在本地不传git,规避了密匙上传的问题。

脚本思路很简单,就是使用fs读取config.js,然后通过正则匹配replace相应变量,重写config.js

env.js:
const path = require("path");
const fs = require("fs");

const ENV = "dev"

const BASIC_AUTH = {
  dev: "**********",
  qa: "**********",
  prod: "**********",
  qap: "**********",
}

// 配置文件地址
let pathName = path.join(__dirname, "config.js")

// 读取文件 格式为utf-8
fs.readFile(pathName, { encoding: "utf-8" }, function (err, data) {
  // 正则替换变量
  data = data.replace(new RegExp("BASIC_AUTH:.*'"), `BASIC_AUTH: '${BASIC_AUTH[ENV]}'`)
  fs.writeFile(pathName, data, function (err) {
    console.log(err);
  })
})

总结:

其他环境变量的切换也可以用相同方式完成。至此,每次环境的切换只需要修改env.js中 ENV的值,点击开发者工具编译按钮,就可以完成。

考虑过一些其他思路,比如用云函数从云数据库中拿到密匙,保存在全局变量中,但是考虑到这种方式需要修改线上代码,且可能存在一些异步的问题,所以没有使用。如果有更好的解决方案,欢迎回帖~~

最后一次编辑于  2022-07-28  
点赞 7
收藏
评论

3 个评论

  • 心猿意马
    心猿意马
    02-29

    我的微信开发者工具输入不了node env.js这个命令,没办法输入空格,请问什么原因,mac电脑

    02-29
    赞同
    回复
  • 周璐alexzhou
    周璐alexzhou
    2022-08-19

    这里还是需要每次修改env.js文件的变量,那我直接再小程序代码里面设置变量,然后更改这个变量不是一样的吗?

    2022-08-19
    赞同
    回复 1
    • ⅴ
      2022-08-21
      主要问题是basic token不能写在小程序代码中,每次切环境,或者切Git分支都会有6,7来个token需要手动修改,所以要有一个本地文件管理。
      2022-08-21
      回复
  • 拂晓
    拂晓
    2022-08-12

    学习了

    2022-08-12
    赞同
    回复
登录 后发表内容