小程序工程化环境变量配置管理
引言
我们在项目开发的过程中,会把环境分为开发环境、测试环境、生产环境等,社区里也有很多类似cross-env环境管理工具。但是在小程序的生态环境中,并没有成熟的解决方案来管理环境变量,开发者往往需要自己手动维护一些项目配置信息,这样做虽然没什么问题,但是随着项目的增大,要维护的配置信息可能会越来越多,我们很难保证不出错。下面我们将利用node的一些知识实现简单的环境变量配置管理。
建立配置文件
首先我们在项目根目录新建一个config文件夹,并在config文件夹下分别建立env/dev.json和env/prod.json等若干不同环境配置文件。分别放置该环境的配置信息,例如
// config/env/dev.json{
"environment":"development",
"defaultURL": "https://dev.xxx.com/api/"
}
然后我们在根目录建立一个放置默认配置的projectConfig.js文件,并把它引入到app.js
// projectConfig.jsmodule.exports ={
"projectname": "xxx",
}
// app.js
const config = require('./projectConfig')
App({
...,
globalData: {
...config
}
})
这样子就完成了第一步:把配置信息引入到了我们的项目中。
根据命令行,选择对应的env下的配置文件
接下来在我们项目的package.json里scripts增加两条命令行,用来启动不同的环境
"scripts": {"test": "echo "Error: no test specified" && exit 1",
"switch:dev": "node switch.js --dev",
"switch:prod": "node switch.js --prod"
}
在根目录建立switch.js,利用node.js处理配置信息
/*** 根据命令行运行参数,修改/config.js 里面的项目配置信息,
*/
const fs = require('fs')
const path = require('path')
//源文件
const sourceFiles = {
prefix: '/config/env/',
dev: 'dev.json',
prod: 'prod.json'
}
//目标文件
const targetFiles = [{
prefix: '/',
filename: 'projectConfig.js'
}]
const preText = 'module.exports = '
// 获取命令行参数
const cliArgs = process.argv.splice(2)
const env = cliArgs[0]
// 判断是否是 prod 环境
const isProd = env.indexOf('prod') > -1 ? true : false
// 根据不同环境选择不同的源文件
const sourceFile = isProd ? sourceFiles.prod : sourceFiles.dev
// 根据不同环境处理数据
fs.readFile(__dirname + sourceFiles.prefix + sourceFile,
(err, data) => {
if (err) {
thrownewError(`Error occurs when reading file ${sourceFile}.nError detail: ${err}`)
process.exit(1)
}
// 获取源文件中的内容
const targetConfig = JSON.parse(data)
// 将获取的内容写入到目标文件中
targetFiles.forEach(function(item, index) {
let result = null
if (item.filename === 'config.js') {
result = preText + JSON.stringify(targetConfig, null, 2)
}
console.log(result)
// 写入文件(这里只做简单的强制替换整个文件的内容)
fs.writeFile(__dirname + item.prefix + item.filename, result, 'utf8', (err) => {
if (err) {
thrownewError(`error occurs when reading file ${sourceFile}. Error detail: ${err}`)
process.exit(1)
}
})
})
})
这样子当我们输入不同的命令行,动态的将相应环境配置信息写入默认配置文件,并引入到项目中。
与开发者工具关联
每次切换环境都要自己运行npm脚本,也会有点不方便,这个时候我们可以配置开发者工具
在开发者工具的本地设置中,勾选启用自定义处理命令,并分别在编译前预处理和上传前预处理填入我们的命令
这样子就保证了开发环境和生产环境隔离,避免产生脏数据。
以上是 小程序工程化环境变量配置管理 的全部内容, 来源链接: utcz.com/a/20019.html