Odczytaj zmienne środowiskowe w Node.js

Odpowiedzi:

1879
process.env.ENV_VARIABLE

Gdzie ENV_VARIABLEjest nazwa zmiennej, do której chcesz uzyskać dostęp.

Zobacz dokumentację Node.js dlaprocess.env .

Jayesh
źródło
4
Zauważ, że nie będzie to widoczne poza procesem węzła i jego podprocesami. Np. Nie byłoby to widoczne, jeśli strzelasz envw innym oknie powłoki, gdy proces węzła jest uruchomiony, ani w tej samej powłoce po zakończeniu procesu węzła.
Marko Bonaci
17
działa to również w przypadku przypisywania zmiennych. process.env.FOO = "foo";Pracuje.
pisklęta
16
Warto wspomnieć, że nie działa to w aplikacji React. process.envjest dezynfekowany ze względów bezpieczeństwa. Dostępne są tylko zmienne rozpoczynające się od REACT_ENV_. Zobacz: github.com/facebookincubator/create-react-app/blob/master/…
Mark Edington
7
@ MarkEdington Myślę, że tak powinno byćREACT_APP_
Pan 14
5
@ Mr.14 Masz rację! To REACT_APP_ nie REACT_ENV_
Mark Edington
133

Korzystając z Node.js , możesz pobrać zmienne środowiskowe według klucza z process.envobiektu:

na przykład

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

Oto odpowiedź, która wyjaśni ustawienie zmiennych środowiskowych w node.js

Subodh Ghulaxe
źródło
jaka biblioteka jest wymagana do korzystania z powyższej metody process.env?
user_mda,
3
@ użytkownik_mda process.envjest wbudowany w interfejs API node.js.
Jason Axelson
Czy po prostu ustawię cokolwiek chcę w procesie. Env? dlaczego ludzie ustawiają go tam, zamiast powiedzieć, że obiekt config jest wymagany () edytowany przez node.js?
PDN
3
process.env daje dostęp do zmiennych środowiskowych ustawionych na poziomie systemu operacyjnego. Można je ustawić na różne sposoby i będą one zależeć od tego, gdzie wdrażasz aplikację. Na przykład często uruchamiam moją aplikację lokalną, używając NODE_ENV = programistyczny NODE_PATH = lib node server.js. Następnie process.env.NODE_PATH zwróci „lib”
NectarSoft
57

Jeśli chcesz użyć klucza ciągu wygenerowanego w programie Node.js, powiedzmy, var v = 'HOME'możesz użyć process.env[v].

W przeciwnym razie process.env.VARNAMEmusi być zakodowane na stałe w twoim programie.

użytkownik2574650
źródło
Dlaczego masz process.env['HOME']?
AlgoRythm
35

Aby pobrać zmienne środowiskowe w Node.JS, możesz użyć process.env.VARIABLE_NAME , ale nie zapominaj, że przypisanie właściwości do process.env niejawnie przekształci wartość na ciąg.

Unikaj logiki logicznej

Nawet jeśli plik .env definiuje zmienną taką jak SHOULD_SEND = false lub SHOULD_SEND = 0 , wartości zostaną przekonwertowane na ciągi znaków (odpowiednio „false” i „0” ) i nie będą interpretowane jako logiczne.

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

Zamiast tego powinieneś dokonać wyraźnych kontroli. Znalazłem, w zależności od nazwy środowiska, długą drogę.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
Igor Litwinowicz
źródło
1
Lubię używać „tak” i „nie” w przypadku zmiennych logicznych env, które muszą być wyraźnie zaznaczone. Pozwala to uniknąć problemów w wielu językach programowania.
Dogweather
22

Możesz użyć pakietu env do zarządzania zmiennymi środowiskowymi dla każdego projektu:

  • Utwórz .envplik w katalogu projektu i umieść tam wszystkie swoje zmienne.
  • Dodaj ten wiersz w górnej części pliku wejściowego aplikacji:
    require('dotenv').config();

Gotowy. Teraz możesz uzyskać dostęp do zmiennych środowiskowych za pomocą process.env.ENV_NAME.

Huy Vo
źródło
9
Pakiet dotenv jest przydatny, ale na zadane pytanie można odpowiedzieć, czytając process.env.ENV_VARIABLE. Pakiet dovenv polega na ładowaniu ustawień z pliku do środowiska.
Robert Patterson
Właśnie o to mi chodzi: zarządzaj zmiennymi env z envbiblioteki i ładuj je .
Huy Vo
1
Możesz zrobić to samo w sposób inny niż node.js, używając envdirnarzędzia.
Chris Johnson
Podobne do github.com/bitrise-io/envman, który również nie jest nodespecyficzny.
MarkHu,
1
uczyniłeś mój dzień! Wielkie dzięki!
Vaha
0

Dlaczego nie użyć ich w katalogu Users w .bash_profilepliku, więc nie musisz wypychać żadnych plików ze zmiennymi do produkcji?

Brad Vanderbush
źródło