Node.js'deki ortam değişkenlerini okuma


Yanıtlar:


1879
process.env.ENV_VARIABLE

Erişmek ENV_VARIABLEistediğiniz değişkenin adı nerede .

İçin Node.js belgelerine bakınprocess.env .


4
Bunun düğüm işlemi ve alt süreçleri dışında görünmeyeceğini unutmayın. Örneğin env, düğüm işlemi çalışırken başka bir kabuk penceresinde veya düğüm işlemi bittikten sonra aynı kabukta ateş ederseniz görünmez .
Marko Bonaci

17
bu aynı zamanda değişken atamak için de kullanılabilir. process.env.FOO = "foo";İşler.
civcivler

16
Bunun bir React uygulamasında çalışmadığını belirtmek gerekir. process.envgüvenlik nedeniyle sterilize edilmiştir. Yalnızca ile başlayan değişkenler REACT_ENV_kullanılabilir. Bakınız: github.com/facebookincubator/create-react-app/blob/master/…
Mark Edington

7
@MarkEdington Bence olmalıREACT_APP_
Bay 14

5
@ Bay.14 Doğru! REACT_APP_ değil REACT_ENV_
Mark Edington

133

Node.js'yi kullanırken , ortam değişkenlerini process.envnesneden anahtarla alabilirsiniz :

Örneğin

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

İşte node.js'de ortam değişkenlerini ayarlamayı açıklayan cevap


Yukarıdaki process.env yöntemini kullanmak için hangi lib gereklidir?
user_mda

3
@ user_mda node.js api'sinde process.envyerleşik olarak bulunur.
Jason Axelson

İşlemde istediğim her şeyi ayarlayabilir miyim? neden insanlar bunu node.js tarafından düzenlenmiş () bir config nesnesi olduğunu söylemek yerine koyuyor?
PDN

3
process.env, işletim sistemi düzeyinde ayarlanan ortam değişkenine erişmenizi sağlar. Bunlar çeşitli şekillerde ayarlanabilir ve uygulamanızı nereye dağıttığınıza bağlı olacaktır. Örneğin, yerel uygulamanızı genellikle NODE_ENV = geliştirme NODE_PATH = lib düğümü server.js kullanarak çalıştırıyorum. Daha sonra process.env.NODE_PATH 'lib' döndürecek
NectarSoft

57

Örneğin, Node.js programınızda oluşturulan bir dize anahtarını var v = 'HOME'kullanmak istiyorsanız, kullanabilirsiniz process.env[v].

Aksi takdirde, process.env.VARNAMEprogramınızda kodlanmış olmalıdır.


Neden var process.env['HOME']?
AlgoRythm

35

Node.JS'de ortam değişkenlerini almak için process.env.VARIABLE_NAME dosyasını kullanabilirsiniz , ancak process.env dosyasına bir özellik atamanın değeri dolaylı olarak bir dizeye dönüştüreceğini unutmayın.

Boole Mantığından Kaçının

.Env dosyanız SHOULD_SEND = false veya SHOULD_SEND = 0 gibi bir değişken tanımlasa bile , değerler dizelere dönüştürülür ( sırasıyla “false” ve “0” ) ve boole olarak yorumlanmaz.

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

Bunun yerine, açık kontroller yapmalısınız. Ortama bağlı olarak bulduğum uzun bir yol.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });

1
Açıkça kontrol edilmesi gereken bool env değişkenleri için 'evet' ve 'hayır' kullanmayı seviyorum. Bu, birçok programlama dilinde problemleri önler.
Dogweather

22

Proje başına ortam değişkenlerinizi yönetmek için env paketini kullanabilirsiniz :

  • .envProje dizini altında bir dosya oluşturun ve tüm değişkenlerinizi oraya koyun.
  • Bu satırı uygulama giriş dosyanızın üstüne ekleyin:
    require('dotenv').config();

Bitti. Artık ortam değişkenlerinize ile erişebilirsiniz process.env.ENV_NAME.


9
Dotenv paketi kullanışlıdır, ancak sorulan soru okuma işlemi.env.ENV_VARIABLE okunarak yanıtlanır. Dovenv paketi, ayarın bir dosyadan ortama yüklenmesi ile ilgilidir.
Robert Patterson

Bu benim açımdan: Env değişkenlerini envkütüphaneden yönetin ve yükleyin .
Huy Vo

1
Bunu, envdiryardımcı programı kullanarak node.js'ye özgü olmayan bir şekilde de yapabilirsiniz .
Chris Johnson

Github.com/bitrise-io/envman'a benzer ve bu da -belirli değildir node.
MarkHu

1
günümü gün ettin! Çok teşekkürler!
Vaha

0

Bunları neden .bash_profiledosyadaki Kullanıcılar dizininde kullanmıyorsunuz , bu nedenle değişkenlerinizle herhangi bir dosyayı üretime zorlamanız gerekmez?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.