评论

小程序原生环境变量的学习与简单设置

小程序原生环境变量的学习与简单设置

注:主要参考学习自索引2。

原因(需求)

区分环境:包含后端服务域名、AppId(不同的小程序主体)、其他环境变量。

分析与两种简单的实现

传统的前端工程项目有(webpack或vite构建)环境变量配置文件,在执行不同的script时,确定环境,然后读取对应的环境变量即可。

小程序原生工程项目不同之处,开发的和生产的代码无需npm run xx 等处理步骤,所以就没有环境变量配置文件的概念,

但小程序提供了一些相关的API:wx.getAccountInfoSync

const { miniProgram: { envVersion } } = wx.getAccountInfoSync();
// envVersion 三种可选值:
// develop 开发版(开发者工具、预览码、提审时审查人员看到的)
// trial	体验版(体验码)
// release	正式版(发布后)

通过__wxConfig.envVersion 也可获取到与上述同样的值。

第一种

如果仅仅需要修改请求域名,提前将配置的域名写在封装request的文件中,按读取读取到环境切换即可。

参考-索引1

第二种

如果是更完善的方案,需要加入一个npm 命令,手动写一个js,需要做以下事,主要参考-索引2、索引4,

  1. 根据命令判断环境,
  2. 读取对应的环境变量对象,修改config/env.js(在封装请求的文件中读取)、修改project.config.json

|- config

|- env.js

|- tools

|- request.js

|- script.env.js

|- package.json

{
  "scripts": {
    "switch:dev": "node script.env.js --dev",
    "switch:prod": "node script.env.js --prod",
    "test": "echo \"Error: no test specified\" && exit 1"
	},
}
module.exports.title = '环境-dev';
module.exports.baseURL = 'https://dev-xx.xxxx.com/';
module.exports.appid = 'wx90dd2a614xxxxxx';
//...
const envConfig = require('../config/env');
const config = {
  timeout: 15000,
  host: envConfig.baseURL
};
//...
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 = {
  // 测试环境
  dev: {
    title: '环境-dev',
    baseURL: 'https://dev.xxxx.com/',
    appid: 'wx90xxxx'
  },
  uat: {
    title: '环境-uat',
    baseURL: 'uat环境url地址'
  },
  // 生产环境
  prod: {
    title: '环境-prod',
    baseURL: 'https://prod.xxxx.com/',
    appid: 'wxfe3xxxxx'
  }
};
// 获取命令行参数
const cliArgs = process.argv.splice(2);
const env = cliArgs[0].slice(2);

const item = CONFIG[env];

// 更新env.js
let configString = '';
Object.keys(item).forEach(key => {
  configString += `module.exports.${key} = '${item[key]}';\n`;
});
writeFile('/config/env.js', configString);

// 修改project.config.json里面的appid
fs.readFile(`${process.cwd()}/project.config.json`, (err, data) => {
  if (err) throw err;
  const _data = JSON.parse(data.toString());
  _data.appid = item.appid;
  writeFile('/project.config.json', JSON.stringify(_data, null, 2));
});

console.log('env', env);

如何使用

  • npm run switch:dev 切换dev环境
  • npm run seitch:prod 切换prod环境

提示:由于这种方式,仍然是需要开发者手动去设置环境变量的,如果没有主动设置,可能会出现将dev配置发布到线上的情况,所以测试体验版数据是否正确仍是必要的,防止自己遗漏,在每次上传生产时执行生产的npm命令即可。


参考索引

  1. https://developers.weixin.qq.com/community/develop/article/doc/000aaecd1989c8fa070be68f651813
  2. https://developers.weixin.qq.com/community/develop/article/doc/000ae44d0e498032109edaad856813
  3. https://developers.weixin.qq.com/community/develop/doc/0004cc6fe543405bb0882c1b156800?highLine=%25E7%258E%25AF%25E5%25A2%2583%25E5%258F%2598%25E9%2587%258F
  4. https://juejin.cn/post/6844904178779717645
  5. https://juejin.cn/post/7055596499119374349


最后一次编辑于  2022-10-15  
点赞 1
收藏
评论
登录 后发表内容