2016-08-12 2 views
0

Ich setze Umgebungsvariablen während des Build-Prozesses mit Gulp, aber sobald meine App startet, sind diese env vars leer.Warum werden meine Umgebungsvariablen zurückgesetzt, nachdem sie mit Schluck gesetzt wurden?

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')); 
}) 

Nach env läuft() in meinem Zug Aufgabe, kann ich sehen, dass process.env.DB_NAME auf "TestDB" gesetzt ist.

server.ts

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

Unmittelbar nach meiner Einfuhren in server.ts, log ich das env var wieder, aber dieses Mal ist es nicht definiert.

Hier ist der Ausgang im Terminal:

[22.06.28] Ab 'build' ...
Einstellung von Umgebungsvariablen
DB_NAME = nbadbtest
[22.06.32] Finished 'build' nach 3,26 s
> node dist/server.js

DB_NAME = undefiniert

+0

FYI, ich arbeite mit Visual Studio-Code in Mac OS X El Capitan v10. 11.6 –

Antwort

0

Es stellt sich heraus, dass dies aufgrund des Terminalfensters der Fall ist, der die Knotenanwendung startet, die bereits geöffnet ist, bevor die Umgebungsvariablen gesetzt werden. Wenn ich npm start ausführen, habe ich ein "prestart" npm-Skript, das meine Build-Aufgabe im Schluck feuert, die diese Umgebungsvariablen setzt. So werden gulp build und node dist/server.js im selben Terminalfenster ausgeführt.

Die Ausführung von gulp build und dann das Öffnen eines neuen Terminalfensters zum Ausführen node dist/server.js behebt dieses Problem, da das neue Terminalfenster Zugriff auf die Umgebungsvariablen hat, die festgelegt wurden.

Anstatt meine Umgebungsvariablen über Schluck zu setzen, verwende ich jetzt dotenv. Ich erstelle gerade eine .env Datei mit allen meinen Umgebungsvariablen und konfigurieren dotenv in meiner server.js Datei wie folgt:

require('dotenv').config();

Verwandte Themen