confidence插件,让config更easy

记录一个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"
    }
}
复制代码

API

咱们在使用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' }
复制代码

标准参数

filter

规则:变量名只能用 字母 和 '_'。根据匹配环境变量的值,来选择用什么变量。(看个栗子瞬间就懂)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

range

先上个栗子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

Shared values($base)

用栗子说明问题

{
  "$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…

相关文章
相关标签/搜索