2017-07-05 5 views
3

Ich verwende Umgebungsvariablen auf meinem Mac, um einige vertrauliche Anmeldeinformationen zu speichern und zu versuchen, über Node darauf zuzugreifen. Ich habe sie in meinem Umfeld Profil mitNode process.env.VARIABLE_NAME gibt undefined zurück

export VARIABLE_NAME=mySensitiveInfo

Als ich echo $VARIABLE_NAME verwende ich erhalten die korrekte Ausgabe (meine sensible Informationen).

Wenn ich jedoch versuche, auf diese Variable in Node mit process.env.VARIABLE_NAME zuzugreifen und versuche, es auf der Konsole auszudrucken, bekomme ich einen undefinierten.

Andere Umgebungsvariablen scheinen jedoch in Ordnung zu sein. Zum Beispiel, wenn ich console.log(process.env.FACEBOOK_CALLBACK_URL), druckt es den richtigen Wert auf meiner Konsole. Ich habe vor ein paar Tagen FACEBOOK_CALLBACK_URL hinzugefügt.

Muss ich meine Maschine oder etwas neu starten? Benötigt es eine gewisse Zeit, bis Umgebungsvariablen im Knoten verfügbar sind? Die nächste Antwort, die ich auf SO gesehen habe, ist this post, aber niemand konnte herausfinden, warum es geschah.

+0

Was ist das Umweltprofil? '.bash_profile'? – shaochuancs

+0

Wie läuft das Node-Programm? –

+0

@ JeremyRodi Ich benutze Visual Studio Code und benutze 'nodemon' oder 'node app.js', um mein Programm zu starten. –

Antwort

5

process.env.VARIABLE_NAME gibt undefined zurück, da die Ausführungsumgebung Node.js die neu hinzugefügte VARIABLE_NAME noch nicht kennt. Um das Problem zu beheben, muss die Node.js-Ausführungsumgebung (z. B. IDE) neu gestartet werden.

Die folgenden Schritte können verwendet werden, um dieses Problem zu reproduzieren:

  1. Öffnen IDE wie WebStorm und schreiben Sie ein einfaches Node.js Programm: console.log(process.env.VARIABLE_NAME). Es wird undefined wie erwartet gedruckt, da VARIABLE_NAME noch nicht definiert ist. Lassen Sie die IDE laufen, schließen Sie sie nicht.
  2. Öffnen Sie das Umgebungsprofil wie .bash_profile und fügen Sie export VARIABLE_NAME=mySensitiveInfo darin hinzu.
  3. Öffnen Sie die Systemkonsole, und führen Sie source .bash_profile aus, sodass die obige export Anweisung ausgeführt wird. Von nun an ist die Umgebungsvariable VARIABLE_NAME immer dann vorhanden, wenn die Systemkonsole geöffnet wird.
  4. Führen Sie in der Systemkonsole das Programm Node.js in Schritt 1 aus. Es wird mySensitiveInfo gedruckt.
  5. Wechseln Sie zur IDE und führen Sie das Programm Node.js aus. Es wird undefined gedruckt.
  6. Neustart der IDE und Node.js Programm ausführen, dieses Mal wird es gerade jetzt mySensitiveInfo
+0

Das hat perfekt funktioniert. Sobald ich meine IDE geschlossen und neu gestartet habe, hat es super funktioniert! Vielen Dank! –

0

Ich habe ein Problem drucken, und ich verwende diese löste es in webpack Config

const plugins = [ 
    new webpack.NoEmitOnErrorsPlugin(), 
    // after compile global will defined `process.env` this Object 
    new webpack.DefinePlugin({ 
     BUILD_AT : Date.now().toString(32), 
     DEBUG: process.env.NODE_ENV !== 'production', 
      'process.env': { 
       'NODE_ENV': JSON.stringify(process.env.NODE_ENV || "development"), 
       'VARIABLE_NAME': JSON.stringify(process.env.VARIABLE_NAME) 
    } 
    }) 
]