Baca variabel lingkungan di Node.js

1288

Apakah ada cara untuk membaca variabel lingkungan dalam kode Node.js?

Seperti misalnya Python os.environ['HOME'].

Jayesh
sumber

Jawaban:

1879
process.env.ENV_VARIABLE

Di mana ENV_VARIABLEnama variabel yang ingin Anda akses.

Lihat Node.js docs untukprocess.env .

Jayesh
sumber
4
Perhatikan bahwa ini tidak akan terlihat di luar proses simpul dan prosesnya. Misalnya itu tidak akan terlihat jika Anda menembak envdi jendela shell lain saat proses node sedang berjalan, atau di shell yang sama setelah proses node keluar.
Marko Bonaci
17
ini juga berfungsi untuk menetapkan variabel. process.env.FOO = "foo";bekerja.
ayam
16
Perlu disebutkan bahwa ini tidak berfungsi dalam aplikasi Bereaksi. process.envdisanitasi untuk alasan keamanan. Hanya variabel yang memulai dengan REACT_ENV_yang tersedia. Lihat: github.com/facebookincubator/create-react-app/blob/master/…
Mark Edington
7
@ MarkEdington, saya pikir seharusnyaREACT_APP_
Tn. 14
5
@ Mr.14 Benar sekali! Ini REACT_APP_ bukan REACT_ENV_
Mark Edington
133

Ketika menggunakan Node.js , Anda dapat mengambil variabel lingkungan dengan kunci dari process.envobjek:

sebagai contoh

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

Inilah jawaban yang akan menjelaskan pengaturan variabel lingkungan di node.js

Subodh Ghulaxe
sumber
Lib apa yang diperlukan untuk menggunakan metode process.env di atas?
user_mda
3
@user_mda process.envdibangun ke api node.js.
Jason Axelson
Apakah saya hanya mengatur apa pun yang saya inginkan pada process.env? mengapa orang mengaturnya di sana sebagai lawan untuk mengatakan, objek konfigurasi yang memerlukan () ed oleh node.js?
PDN
3
process.env memberi Anda akses ke variabel lingkungan yang ditetapkan pada tingkat sistem operasi. Ini dapat diatur dengan berbagai cara dan akan tergantung pada di mana Anda menyebarkan aplikasi Anda Misalnya, saya sering menjalankan aplikasi lokal saya menggunakan NODE_ENV = pengembangan NODE_PATH = lib node server.js. Kemudian process.env.NODE_PATH akan mengembalikan 'lib'
NectarSoft
57

Jika Anda ingin menggunakan kunci string yang dihasilkan dalam program Node.js Anda, katakanlah var v = 'HOME', Anda dapat menggunakan process.env[v].

Kalau tidak, process.env.VARNAMEharus di-hardcode di program Anda.

pengguna2574650
sumber
Mengapa Anda memiliki process.env['HOME']?
AlgoRythm
35

Untuk mengambil variabel lingkungan di Node.JS Anda dapat menggunakan process.env.VARIABLE_NAME , tetapi jangan lupa bahwa menempatkan properti di process.env akan secara implisit mengkonversi nilai menjadi string.

Hindari Boolean Logic

Bahkan jika file .env Anda mendefinisikan variabel seperti SHOULD_SEND = false atau SHOULD_SEND = 0 , nilai-nilai akan dikonversi ke string ( masing-masing "false" dan "0" ) dan tidak diartikan sebagai boolean.

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

Sebagai gantinya, Anda harus melakukan pemeriksaan eksplisit. Saya telah menemukan tergantung pada nama lingkungannya.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
Igor Litvinovich
sumber
1
Saya suka menggunakan 'ya' dan 'tidak' untuk boolean env vars yang harus diperiksa secara eksplisit. Ini menghindari masalah dalam banyak bahasa pemrograman.
Dogweather
22

Anda dapat menggunakan paket env untuk mengelola variabel lingkungan Anda per proyek:

  • Buat .envfile di bawah direktori proyek dan letakkan semua variabel Anda di sana.
  • Tambahkan baris ini di bagian atas file entri aplikasi Anda:
    require('dotenv').config();

Selesai Sekarang Anda dapat mengakses variabel lingkungan Anda process.env.ENV_NAME.

Huy Vo
sumber
9
Paket dotenv berguna, tetapi pertanyaan yang diajukan dijawab dengan membaca process.env.ENV_VARIABLE. Paket dovenv adalah tentang memuat pengaturan dari file ke lingkungan.
Robert Patterson
Itulah poin saya: kelola dan muat variabel env dari envperpustakaan.
Huy Vo
1
Anda dapat melakukan hal yang sama dengan cara non-node.js-spesifik menggunakan envdirutilitas.
Chris Johnson
Mirip dengan github.com/bitrise-io/envman yang juga tidak nodespesifik.
MarkHu
1
kamu membuat hariku! Terima kasih banyak!
Vaha
0

Mengapa tidak menggunakannya di direktori Users di .bash_profilefile, jadi Anda tidak perlu mendorong file apa pun dengan variabel Anda ke produksi?

Brad Vanderbush
sumber