Umgebungsvariablen in Node.js lesen

1288

Gibt es eine Möglichkeit, Umgebungsvariablen in Node.js Code zu lesen?

Wie zum Beispiel Pythons os.environ['HOME'].

Jayesh
quelle

Antworten:

1879
process.env.ENV_VARIABLE

Wo ENV_VARIABLEist der Name der Variablen, auf die Sie zugreifen möchten?

Siehe Node.js-Dokumente fürprocess.env .

Jayesh
quelle
4
Beachten Sie, dass dies außerhalb des Knotenprozesses und seiner Unterprozesse nicht sichtbar ist. Zum Beispiel wäre es nicht sichtbar, wenn Sie envin einem anderen Shell-Fenster feuern, während der Knotenprozess ausgeführt wird, oder in derselben Shell, nachdem der Knotenprozess beendet wurde.
Marko Bonaci
17
Dies funktioniert auch zum Zuweisen von Variablen. process.env.FOO = "foo";funktioniert.
Küken
16
Es ist erwähnenswert, dass dies in einer React-Anwendung nicht funktioniert. process.envwird aus Sicherheitsgründen bereinigt. Es sind nur Variablen REACT_ENV_verfügbar , die mit beginnen . Siehe: github.com/facebookincubator/create-react-app/blob/master/…
Mark Edington
7
@ MarkEdington Ich denke, es sollte seinREACT_APP_
Mr. 14
5
@ Mr.14 Richtig du bist! Es ist REACT_APP_ nicht REACT_ENV_
Mark Edington
133

Bei Verwendung von Node.js können Sie Umgebungsvariablen per Schlüssel aus dem process.envObjekt abrufen :

zum Beispiel

var mode   = process.env.NODE_ENV;
var apiKey = process.env.apiKey; // '42348901293989849243'

Hier ist die Antwort, die das Festlegen von Umgebungsvariablen in node.js erklärt

Subodh Ghulaxe
quelle
Welche Bibliothek ist erforderlich, um die obige process.env-Methode zu verwenden?
user_mda
3
@user_mda process.envist in die API von node.js integriert.
Jason Axelson
Setze ich einfach alles, was ich will, auf process.env? Warum setzen die Leute es dort, anstatt zu sagen, ein Konfigurationsobjekt, das von node.js benötigt () wird?
PDN
3
Mit process.env können Sie auf Umgebungsvariablen zugreifen, die auf Betriebssystemebene festgelegt wurden. Diese können auf verschiedene Arten festgelegt werden und hängen davon ab, wo Sie Ihre App bereitstellen. Beispielsweise führe ich meine lokale App häufig mit NODE_ENV = development NODE_PATH = lib node server.js aus. Dann gibt
process.env.NODE_PATH
57

Wenn Sie beispielsweise einen in Ihrem Node.js-Programm generierten Zeichenfolgenschlüssel verwenden möchten, var v = 'HOME'können Sie diesen verwenden process.env[v].

Andernfalls process.env.VARNAMEmuss in Ihrem Programm fest codiert werden.

user2574650
quelle
Warum haben Sie process.env['HOME']?
AlgoRythm
35

Um Umgebungsvariablen in Node.JS abrufen Sie verwenden können process.env.VARIABLE_NAME , aber nicht vergessen , dass eine Eigenschaft auf process.env Zuweisung implizit den Wert in eine Zeichenfolge konvertieren.

Vermeiden Sie boolesche Logik

Selbst wenn Ihre .env-Datei eine Variable wie SHOULD_SEND = false oder SHOULD_SEND = 0 definiert , werden die Werte in Zeichenfolgen ( "false" bzw. "0" ) konvertiert und nicht als Boolesche Werte interpretiert.

if (process.env.SHOULD_SEND) {
 mailer.send();
} else {
  console.log("this won't be reached with values like false and 0");
}

Stattdessen sollten Sie explizite Überprüfungen durchführen. Ich habe festgestellt, dass je nach Umgebungsname ein langer Weg geht.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
Igor Litvinovich
quelle
1
Ich verwende gerne 'yes' und 'no' für boolesche env-Variablen, die explizit überprüft werden müssen. Dies vermeidet Probleme in vielen Programmiersprachen.
Dogweather
22

Mit dem env- Paket können Sie Ihre Umgebungsvariablen pro Projekt verwalten:

  • Erstellen Sie eine .envDatei unter dem Projektverzeichnis und legen Sie alle Ihre Variablen dort ab.
  • Fügen Sie diese Zeile oben in Ihre Anwendungseintragsdatei ein:
    require('dotenv').config();

Erledigt. Jetzt können Sie mit auf Ihre Umgebungsvariablen zugreifen process.env.ENV_NAME.

Huy Vo
quelle
9
Das dotenv-Paket ist nützlich, aber die gestellte Frage wird durch Lesen von process.env.ENV_VARIABLE beantwortet. Im dovenv-Paket geht es darum, Einstellungen aus einer Datei in die Umgebung zu laden.
Robert Patterson
Das ist mein Punkt: Verwalten und Laden von env-Variablen aus der envBibliothek.
Huy Vo
1
Sie können dasselbe mit dem envdirDienstprogramm auf eine nicht node.js-spezifische Weise tun .
Chris Johnson
Ähnlich wie bei github.com/bitrise-io/envman, das auch nicht nodespezifisch ist.
MarkHu
1
du hast meinen Tag gerettet! Vielen Dank!
Vaha
0

Warum verwenden Sie sie nicht im Benutzerverzeichnis der .bash_profileDatei, damit Sie keine Dateien mit Ihren Variablen in die Produktion verschieben müssen?

Brad Vanderbush
quelle