在 Express 中存储 environment/configuration 变量的首选方法是什么?
What's the preferred way to store environment/configuration variables in Express?
在 Express 应用中针对不同环境处理配置的最佳方式是什么?
我是否应该将 {development, production, testing}.json 放在 /.config 中并根据 process.env.NODE_ENV 加载合适的?像...
var env = process.env.NODE_ENV || 'development';
var config = require('./config/' + env + ".json");
或者有更好的方法吗?
我通常会这样做:
文件结构:
config/
config.js
env/
development.js
test.js
production.js
然后在config.js
文件里面存放通用配置的东西,以及加载各自的环境配置:
// main config.js file
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
// load the config file for the current environment
var config = require('./env/' + process.env.NODE_ENV);
// extend config with universal config data
config.someEnvAgnosticSetting = true;
// export config
module.exports = config;
这使您可以轻松地分离出特定于环境的配置,同时允许任何需要该配置的模块只需要根配置文件。
例如,在您的 server.js
文件中:
// require config, not worrying about what environment is being loaded
var config = require('./config/config');
// use config data
app.listen(config.port);
编辑:顺便说一句,我没有提出这种方法 - 对于节点应用程序(或一般的 Web 应用程序,但碰巧在节点中你需要推出自己的设置)这是一种非常常见的方法。查看 mean.js example app 以获取使用此模式的更深入的示例。
我建议您也看看 env-dot-prop
包。
它允许您使用 dot-path
.
来自 process.env
的 set/get 属性
假设您的 process.env
包含以下内容:
process.env = {
FOO_BAR: 'baz'
'FOO_': '42'
}
然后你可以像这样操作环境变量:
const envDotProp = require('env-dot-prop');
console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42'}
envDotProp.get('foo');
//=> {bar: 'baz', '': '42'}
envDotProp.get('foo.');
//=> '42'
envDotProp.get('foo.', {parse: true});
//=> 42
envDotProp.set('baz.foo', 'bar');
envDotProp.get('', {parse: true});
//=> {foo: {bar: 'baz', '': 42}, baz: {foo: 'bar'}}
console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42', BAZ_FOO: 'bar'}
envDotProp.delete('foo');
envDotProp.get('');
//=> {baz: {foo: 'bar'}}
console.log(process.env);
//=> {BAZ_FOO: 'bar'}
这有助于您解析环境变量并将它们用作应用程序中的配置对象。
它还可以帮助您实现 12-factor configuration.
在 Express 应用中针对不同环境处理配置的最佳方式是什么?
我是否应该将 {development, production, testing}.json 放在 /.config 中并根据 process.env.NODE_ENV 加载合适的?像...
var env = process.env.NODE_ENV || 'development';
var config = require('./config/' + env + ".json");
或者有更好的方法吗?
我通常会这样做:
文件结构:
config/
config.js
env/
development.js
test.js
production.js
然后在config.js
文件里面存放通用配置的东西,以及加载各自的环境配置:
// main config.js file
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
// load the config file for the current environment
var config = require('./env/' + process.env.NODE_ENV);
// extend config with universal config data
config.someEnvAgnosticSetting = true;
// export config
module.exports = config;
这使您可以轻松地分离出特定于环境的配置,同时允许任何需要该配置的模块只需要根配置文件。
例如,在您的 server.js
文件中:
// require config, not worrying about what environment is being loaded
var config = require('./config/config');
// use config data
app.listen(config.port);
编辑:顺便说一句,我没有提出这种方法 - 对于节点应用程序(或一般的 Web 应用程序,但碰巧在节点中你需要推出自己的设置)这是一种非常常见的方法。查看 mean.js example app 以获取使用此模式的更深入的示例。
我建议您也看看 env-dot-prop
包。
它允许您使用 dot-path
.
process.env
的 set/get 属性
假设您的 process.env
包含以下内容:
process.env = {
FOO_BAR: 'baz'
'FOO_': '42'
}
然后你可以像这样操作环境变量:
const envDotProp = require('env-dot-prop');
console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42'}
envDotProp.get('foo');
//=> {bar: 'baz', '': '42'}
envDotProp.get('foo.');
//=> '42'
envDotProp.get('foo.', {parse: true});
//=> 42
envDotProp.set('baz.foo', 'bar');
envDotProp.get('', {parse: true});
//=> {foo: {bar: 'baz', '': 42}, baz: {foo: 'bar'}}
console.log(process.env);
//=> {FOO_BAR: 'baz', 'FOO_': '42', BAZ_FOO: 'bar'}
envDotProp.delete('foo');
envDotProp.get('');
//=> {baz: {foo: 'bar'}}
console.log(process.env);
//=> {BAZ_FOO: 'bar'}
这有助于您解析环境变量并将它们用作应用程序中的配置对象。
它还可以帮助您实现 12-factor configuration.