我有一个config.js,它设置了所有变量。
我想创建一个config.global.js并让config.production.js覆盖其中的一些,config.development.js覆盖其中的一些。
这是一个示例config.development.js:
var config = {};
config.env = 'development';
config.hostname = 'example.dev';
config.appname = 'Example.com';
config.site_url = 'http://example.dev:8080';
module.exports = config;
我想我可以在config.development.js(和config.production.js)中执行此操作以覆盖:
var config = require('config.global.js');
config.env = 'development';
config.hostname = 'example.dev';
config.appname = 'Example.com';
config.site_url = 'http://example.dev:8080';
module.exports = config;
然后在app.js中,我可以这样做:
var cfg = require('config.' + ( process.ENV.APP_ENV || 'development' ) + '.js');
app.set('domain', cfg.hostname);
有哪些其他方法可以定义应用程序配置变量?
答案 0 :(得分:3)
为什么不将一个JSON文件与所有环境的设置一起使用。引入更多环境时,您的方法可能无法很好地扩展。您可以通过查找NODE_ENV属性并使用它来从您的环境中选择一组属性来获取正确的属性集。
我之前在Bootstraping a Node.js App for Dev/Prod Environment写了一篇关于它的博客。具体请参阅“在测试期间模拟生产环境”,以获取如何执行此操作的示例。
答案 1 :(得分:2)
如果您遵循himanshu的建议并使用单个配置文件,您可以使用原型继承来避免重复:
var config = {};
config.base = {};
config.base.env = 'development';
config.base.hostname = 'example.dev';
config.base.appname = 'Example.com';
config.base.site_url = 'http://example.dev:8080';
config.development = Object.create(config.base);
config.development.debugLevel = 'high';
...
config.production = Object.create(config.base);
config.production.debugLevel = 'low';
...
module.exports = config;
Object.create()
是一个ES5函数,它使用指定的原型创建一个新的空对象。