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…

相關文章
相關標籤/搜索