asa*_*asa 7 json config node.js
我有应用程序设置的node.js应用程序和conf.json文件,即:
{
"settings": [
{
"name": "setting1",
"connectionString": {
"host": "mongodb://127.0.0.1:27017/db",
"collection": "collection1"
}
},
{
"name": "setting2",
"file": "/path/file",
"token": "development token"
}
]
}
Run Code Online (Sandbox Code Playgroud)
有没有办法在nconf或其他工具中使用.NET的配置转换模拟,所以我可能有生成配置文件覆盖,即conf.production.json:
{
"settings": [
{
"name": "setting2",
"token": "production token"
}
]
}
Run Code Online (Sandbox Code Playgroud)
生产模式中"setting2"的预期值是"生产令牌",并从默认配置文件中休息.我试图用nconf加载基本文件,但它不起作用:
nconf.file(process.env.NODE_ENV, './conf.' + process.env.NODE_ENV + '.json');
nconf.file('./conf.json');
Run Code Online (Sandbox Code Playgroud)
小智 2
我个人用来处理这个问题的配置脚本的相关部分:
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 ] );
}
});
} );
Run Code Online (Sandbox Code Playgroud)
我认为唯一的依赖项是sprintf,您可以使用它来安装它npm,也可以稍微重构一下代码。
基本上,我传入一个env参数,然后设置.env为该对象。然后,我遍历一个includes对象,并从同一配置对象中提取任何相关的 JSON 对象。
然后我通过访问所有内容config.get( 'env:<param>' )
我使用的更简单的文件之一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
}
}
};
Run Code Online (Sandbox Code Playgroud)
例如,您可以包含对象列表 ( ['cdn', 'libraries']),在这种情况下它们将映射到。env.cdn.param或者您可以包含一个映射,如果键是__local,则它映射到当前对象。
| 归档时间: |
|
| 查看次数: |
2009 次 |
| 最近记录: |