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 .


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


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.


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

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.


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?

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.