记录一个confidence插件,简单明了地根据不一样环境变量更换配置。平时咱们写 config 或者 settings 文件要仔细区分环境,参数值比较混乱,难管理。有了 confidence 插件以后,不再用担忧环境参数混乱的问题了。
持续更新 smilejoe.cnnode
confidence 地址
github.com/hapipal/con…android
结构很清晰,根据不一样的环境变量获取不一样的值。还能作一些范围控制。使用起来很简单,只要配置标准参数(如:$filter)便可。ios
{
"key1": "abc",
"key2": {
"$filter": "env",
"production": {
"deeper": {
"$value": "value"
}
},
"$default": {
"$filter": "platform",
"android": 0,
"ios": 1,
"$default": 2
}
},
"ab": {
"$filter": "random.a",
"$range": [
{ "limit": 10, "value": 4 },
{ "limit": 20, "value": 5 }
],
"$default": 6
},
"$meta": {
"description": "example file"
}
}
复制代码
咱们在使用confidence以前,先介绍下它的APIgit
new Store(document) 建立一个配置容器
store.load(document) 载入一份配置文件
store.get() 根据参数生成配置github
// 一个简单的demo
const { Store } = require('confidence')
const { env } = process
// 从环境变量取值
const criteria = {
env: env.NODE_ENV
}
const settings = {
platform: {
$filter: 'env',
development: 'this is DEV environment',
qa: 'this is in QA environment',
production: 'this is in PRO environment',
$default: 'this is in LOCAL environment'
}
}
// 建立配置容器
const store = new Store(settings)
module.exports = {
settings: store.get('/', criteria) //根据环境变量生成对应的配置
}
// settings 结构为 { platform: 'this is in DEV environment' }
复制代码
规则:变量名只能用 字母 和 '_'。根据匹配环境变量的值,来选择用什么变量。(看个栗子瞬间就懂)api
platform: {
$filter: 'NODE_ENV',
development: 'this is DEV environment',
qa: 'this is in QA environment',
production: 'this is in PRO environment',
$default: 'this is in LOCAL environment'
}
复制代码
在终端执行export,会把全部的环境变量打印出来,观察下 NODE_ENV 的值,本人本地的 NODE_ENV 值是 dev, 故直接用default值。
最终结果: { platform: 'this is in LOCAL environment' }框架
PS: 把$filter 看成 switch-case 语句就好理解了。dom
先上个栗子koa
key: {
"$filter": "random",
"$range": [
{ "limit": 10, "value": 4 },
{ "limit": 20, "value": 5 }
],
"$default": 6
}
复制代码
当 random 小于等于10,key的值为4;
当 random 大于10而且小于等于20, key的值为5;
当 random 大于20,key的值为6ide
用栗子说明问题
{
"$filter": "env",
"$base": {
"logLocation": "/logs"
},
"production": {
"logLevel": "error"
},
"qa": {
"logLevel": "info",
"logLocation": "/qa/logs"
},
"staging": {
"logLevel": "debug"
}
}
复制代码
当写了$base,如下的条件中若是不覆写 logLocation, 就默认有一个"logLocation": "/logs" 属性。
因此当 env 是 production 时,结果为
{
"logLevel": "error",
"logLocation": "/logs"
}
复制代码
当 env 是 qa 时,结果为
{
"logLevel": "info",
"logLocation": "/qa/logs"
}
复制代码
使用confidence设置配置文件快捷方便,清晰明了,node型框架(hapi or koa)通通适用。
这里有一个 hapi 小型脚手架,包含confidence插件, Glue插件等,练手好demo!
demo传送门 github.com/JoeSmile/ha…