Đọc các biến môi trường trong Node.js


Câu trả lời:


1879
process.env.ENV_VARIABLE

Đâu ENV_VARIABLElà tên của biến bạn muốn truy cập.

Xem tài liệu Node.js choprocess.env .


4
Lưu ý rằng điều này sẽ không được nhìn thấy bên ngoài quá trình nút và các quy trình con của nó. Ví dụ, nó sẽ không hiển thị nếu bạn bắn envvào một cửa sổ shell khác trong khi quá trình nút đang chạy, cũng như trong cùng một shell sau khi quá trình nút thoát.
Marko Bonaci

17
điều này cũng hoạt động để gán các biến. process.env.FOO = "foo";làm.
gà con

16
Điều đáng nói là nó không hoạt động trong ứng dụng React. process.envđược vệ sinh vì lý do an ninh. Chỉ các biến bắt đầu bằng REACT_ENV_có sẵn. Xem: github.com/facebookincubator/create-react-app/blob/master/iêu
Mark Edington

7
@MarkEdington Tôi nghĩ rằng nó nên đượcREACT_APP_
Ông 14

5
@ Mr.14 Đúng rồi bạn! Đó là REACT_APP_ không phải REACT_ENV_
Đánh dấu Edington

133

Khi sử dụng Node.js , bạn có thể truy xuất các biến môi trường theo khóa từ process.envđối tượng:

ví dụ

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

Dưới đây là câu trả lời sẽ giải thích việc thiết lập các biến môi trường trong node.js


những gì lib được yêu cầu để sử dụng phương thức process.env ở trên?
user_mda

3
@user_mda process.envđược tích hợp vào api node.js.
Jason Axelson

Tôi có thể đặt bất cứ thứ gì tôi muốn trên process.env không? tại sao mọi người đặt nó ở đó trái ngược với nói, một đối tượng cấu hình được yêu cầu () 'ed bởi node.js?
PDN

3
process.env cung cấp cho bạn quyền truy cập vào biến môi trường được đặt ở cấp hệ điều hành. Chúng có thể được đặt theo nhiều cách khác nhau và sẽ phụ thuộc vào nơi bạn đang triển khai ứng dụng của mình. Ví dụ: tôi thường chạy ứng dụng cục bộ của mình bằng NODE_ENV = Development NODE_PATH = lib node server.js. Sau đó, process.env.NODE_PATH sẽ trả về 'lib'
NectarSoft

57

Nếu bạn muốn sử dụng khóa chuỗi được tạo trong chương trình Node.js của mình var v = 'HOME', bạn có thể sử dụng process.env[v].

Nếu không, process.env.VARNAMEphải được mã hóa cứng trong chương trình của bạn.


Tại sao bạn có process.env['HOME']?
AlgoRy nhịp

35

Để truy xuất các biến môi trường trong Node.JS, bạn có thể sử dụng process.env.VARIABLE_NAME , nhưng đừng quên rằng việc gán một thuộc tính trên process.env sẽ ngầm chuyển đổi giá trị thành một chuỗi.

Tránh logic Boolean

Ngay cả khi tệp .env của bạn xác định một biến như SHOULD_SEND = false hoặc SHOULD_SEND = 0 , các giá trị sẽ được chuyển đổi thành chuỗi ( lần lượt là false false và 0 0 0 ) và không được hiểu là booleans.

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

Thay vào đó, bạn nên kiểm tra rõ ràng. Tôi đã tìm thấy tùy thuộc vào tên môi trường đi một chặng đường dài.

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

1
Tôi thích sử dụng 'có' và 'không' cho các lọ env boolean phải được kiểm tra rõ ràng. Điều này tránh các vấn đề trong nhiều ngôn ngữ lập trình.
Dogweather

22

Bạn có thể sử dụng gói env để quản lý các biến môi trường cho mỗi dự án:

  • Tạo một .envtệp trong thư mục dự án và đặt tất cả các biến của bạn ở đó.
  • Thêm dòng này vào đầu tệp nhập ứng dụng của bạn:
    require('dotenv').config();

Làm xong. Bây giờ bạn có thể truy cập các biến môi trường của bạn với process.env.ENV_NAME.


9
Gói dotenv rất hữu ích, nhưng câu hỏi được trả lời bằng cách đọc process.env.ENV_VARIABLE. Gói dovenv là tất cả về tải cài đặt từ một tệp vào môi trường.
Robert Patterson

Đó là quan điểm của tôi: quản lý và tải các biến env từ envthư viện.
Huy Võ

1
Bạn có thể làm tương tự theo cách không dành riêng cho node.js bằng envdirtiện ích.
Chris Johnson

Tương tự như github.com/bitawn-io/envman cũng không đặc nodebiệt.
MarkHu

1
bạn đã làm cho ngày của tôi! Cảm ơn rất nhiều!
Vaha

0

Tại sao không sử dụng chúng trong thư mục Người dùng trong .bash_profiletệp, vì vậy bạn không phải đẩy bất kỳ tệp nào có biến của mình vào sản xuất?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.