我的配置腳本的相關部分,我個人用它來處理這個問題:
nconf
.argv ()
.env ()
.defaults(require('./_config.js'))
.use ('memory')
;
...
nconf.set('env' , nconf.get('environments:' + env));
nconf.set('env:name', env);
var includes = nconf.get('env:includes');
if({}.toString.call(includes) === '[object Array]'){
var incs = {};
includes.forEach(function(val){
incs[ val ] = val;
});
includes = incs;
}
Object.keys(includes).forEach(function(incName){
var incPath = includes[ incName ]
, incData = nconf.get('environments:' + incPath);
Object.keys(incData).forEach(function(key){
var keyNm = (incName.indexOf('__local' === 0))
? 'env:%s' .sprintf(key)
: 'env:%s:%s'.sprintf(incName, key)
;
if(nconf.get(keyNm) == null){
nconf.set(keyNm, incData[ key ]);
}
});
});
我認爲唯一的依賴有sprintf
,您可以使用npm
進行安裝,也可以稍微重新設置代碼。
基本上,我通過env
帕拉姆,並設置.env
該對象。然後我走一個includes
對象,並從相同的配置對象中提取任何相關的JSON對象。
我然後通過config.get('env:<param>')
其中simplier config.js
的訪問一切(我不喜歡.json
,因爲它不能有評論)的文件,我使用:
module.exports =
{
environments : {
libraries : {
jQuery : '//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js'
}
, localLibraries : {
jQuery : '/js/jquery-2.1.0.js'
}
, web_server : {
task : 'web_server'
, includes : [ 'cdn', 'libraries' ]
, port : 12567
, csrfMaxAgeMs : 1000 * 60 * 60 * 24 * 30 // 30 days
, csrfHashAlg : 'sha256'
, apiHostName : '(^|\\.)api.*'
, frontend : '/frontend'
, jsonSpaces : 0
}
, local_web_server : {
task : 'web_server'
, includes : { __local: 'web_server', libraries: 'localLibraries' }
, jsonSpaces : 4
, dev : true
}
}
};
要麼你有一個清單(['cdn', 'libraries']
),在這種情況下,它們會映射到env.cdn.param
,例如。或者你可以包含映射,如果鍵是__local
,它映射到當前對象。
作爲一個黑客,我可以使用像手動合併對象的東西:nconf.stores.file.store = utils.merge(nconf.stores.file.store,nconf.stores [process.env.NODE_ENV] .store); – asa