2017-09-11 46 views
0

我是節點js的新手。我爲不同的環境開發了不同的配置,例如dev,prod等。目前,在創建我的應用程序包時,我將.json複製到config.json,然後將config.json作爲配置變量(全局)導出,並在整個應用程序中使用它。如何加載配置json作爲環境變量nodejs

config = require(__dirname + '/config/config'); (config.httpProxy && config.httpProxy.enabled);

我想加載特定的env.json作爲環境變量的一部分(用於開發dev.json的所有密鑰導出爲應用程序中的全局變量),而不是將其複製到應用程序的config.json,使相同的應用程序可以在不同的環境中使用。怎麼做。

PS:用於應用程序打包支持和依賴關係管理我使用gulp和npm。

請幫忙。

+1

在每個環境中設置一個變量以幫助識別它並確定要加載哪個文件。一個這樣的標準是設置'NODE_ENV',可以通過'process.env.NODE_ENV'訪問。 – Marty

+0

感謝馬蒂。你有一些代碼示例嗎? – Lovey

+0

是的,請參閱我上面評論的最後部分。 – Marty

回答

0

你能說出你的文件是這樣的:

config.development.json 
config.production.json 
config.test.json 

然後加載文件爲:

config = require(__dirname + '/config/config.' + process.env.NODE_ENV); 

其中process.env.NODE_ENV值可以是開發/生產/測試

你必須開始你的申請

NODE_ENV=development node app.js 

爲此工作。

+0

你錯過了一些東西。 – Marty

0

如果您正在通過腳本運行項目,請將NODE_ENV設置爲您的package.json文件。

{ 
    ... 
    "scripts": { 
    "nodemon:server": "NODE_ENV=dev NODE_PATH=. nodemon --exec \"babel-node --stage 1\" server.js", 
    "prod:server": "NODE_ENV=prod NODE_PATH=. nodemon --exec \"babel-node --stage 1\" server.js" 

    }, 
    "author": "'Shubham Batra'", 
    "license": "MIT", 
    .... 
} 

「PROD:服務器」: 「NODE_ENV = PROD NODE_PATH = nodemon --exec \」 巴別節點--stage 1 \ 「server.js」

比配置使用, js文件例如

if (process.env.NODE_ENV === 'test') { 
    url = 'http://abc:3000'; 
    dbUrl= 'xyz'; 
    password = '***'; 

} else if (process.env.NODE_ENV === 'prod') { 
    url = 'http://def:3000'; 
    ... 
} 
export default { 

    conf: { 
    url, 
    dbUrl, 
    ... 
    } 
} 

在這之後,你可以在任何地方在你的項目和使用的conf

+0

HI Shubham,謝謝你的回答。但是我阻止了使用條件塊加載配置,並且只在配置級別尋找某些東西。整個想法是使應用程序的最小/無需修改,同一應用程序可以使用不同的配置部署在差異環境中。 – Lovey

0

導入此配置文件,我建議你使用這個模塊被稱爲配置它可以處理所有的ENV配置文件。 https://www.npmjs.com/package/config

只是要名爲config的文件夾,使文件在它:

當啓動服務器提供相關環境別人提及。 然後你可以使用你的配置文件中提到的任何屬性。

+0

謝謝,我目前使用同一個模型。但是,我需要將所有配置放在應用程序之外。 – Lovey

+0

如果您願意使用memecached或redis,則可以將所有配置存儲爲這些存儲鍵值對。從那裏訪問您的所有配置。 這樣,您將不得不在應用程序中僅保留redis/memcached的連接細節。 您不必擔心性能問題,這些都是非常快速和可靠的存儲這些關鍵價值數據。 – TGW

+0

是的,但我需要在應用程序中掛接緩存配置。我試圖完全將應用程序與應用程序分開,以便通過注入不同的配置可以在任何位置部署相同的應用程序。 – Lovey