簡體   English   中英

根據環境覆蓋Express / Node應用的config.js變量

[英]overriding config.js variables for express/node app based on environment

我有一個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);

定義應用程序配置變量的其他方法有哪些?

為什么不使用具有所有環境設置的一個JSON文件。 當您引入更多環境時,您的方法可能無法很好地擴展。 通過查找NODE_ENV屬性並使用它從您的環境中選擇屬性集,可以獲取正確的屬性集。

不久前,我在Bootstraping適用於Dev / Prod環境的Node.js應用程序中寫了有關它的博客。 請具體閱讀“ 在測試期間模擬生產環境 ”以獲取有關操作方法的示例。

如果遵循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函數,它使用指定的原型創建一個新的空對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM