記錄一個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…