2016-08-12 52 views
0

我在使用Gulp構建過程中設置了環境變量,但是一旦我的應用程序啓動,那些env變量就爲空。爲什麼我的環境變量在用gulp設置後會被重置?

gulpfile.js

gulp.task('build', function() { 
    if (fileExists('.env.json')) { 
    console.log('Setting environment variables'); 
    env({ 
     file: '.env.json', 
     vars: {"DB_NAME": "nbadbtest"} 
    }); 
    console.log("DB_NAME=%s", process.env.DB_NAME); // DB_NAME=TestDB 
    } else { 
    console.log('.env.json file not found. Not setting environment variables.') 
    } 
    var tsProject = ts.createProject(path.resolve('./tsconfig.json')); 
    var tsResult = tsProject.src().pipe(ts(tsProject)); 
    return tsResult.js.pipe(gulp.dest('dist')); 
}) 

在我一飲而盡任務運行ENV()後,我可以看到process.env.DB_NAME被設置爲 「TESTDB」。

server.ts

console.log("DB_NAME=%s", process.env.DB_NAME); // DB_NAME=undefined

我立即在server.ts進口後,我再次登錄了的環境變量,但是這一次是不確定的。

下面是在終端輸出:

[22時06分28秒]啓動 '構建' ...
設置環境變量
DB_NAME = nbadbtest
[22時06分32秒]已完成後3.26小號
>節點DIST/server.js

DB_NAME '構建'=未定義

+0

通知你,我用Visual Studio代碼在Mac OS X埃爾卡皮坦V10工作。 11.6 –

回答

0

事實證明,這是由於在設置環境變量之前啓動節點應用程序的終端窗口已經打開。當我運行npm start時,我有一個「prestart」npm腳本,它會啓動我的構建任務,並設置這些環境變量。因此,gulp buildnode dist/server.js在相同的終端窗口中運行。

運行gulp build然後打開一個新的終端窗口運行node dist/server.js修復了這個問題,因爲新的終端窗口可以訪問設置的環境變量。

而不是通過gulp設置我的環境變量,我現在使用dotenv。我只是創建我所有的環境變量.ENV文件,並在我的server.js文件中配置dotenv像這樣:

require('dotenv').config();