อ่านตัวแปรสภาพแวดล้อมใน Node.js


คำตอบ:


1879
process.env.ENV_VARIABLE

ในกรณีที่ENV_VARIABLEเป็นชื่อของตัวแปรที่คุณต้องการเข้าถึง

ดูเอกสารสำหรับ Node.jsprocess.env


4
โปรดทราบว่าสิ่งนี้จะไม่สามารถมองเห็นได้นอกกระบวนการโหนดและกระบวนการย่อยของมัน เช่นจะไม่สามารถมองเห็นได้หากคุณดำเนินการenvในหน้าต่างเชลล์อื่นในขณะที่กระบวนการโหนดกำลังทำงานหรือในเชลล์เดียวกันหลังจากกระบวนการโหนดจบการทำงาน
Marko Bonaci

17
ยังใช้งานได้กับการกำหนดตัวแปร process.env.FOO = "foo";โรงงาน
ลูกไก่

16
เป็นมูลค่าการกล่าวขวัญว่านี่ไม่ทำงานในแอปพลิเคชันตอบโต้ process.envถูกทำให้สะอาดด้วยเหตุผลด้านความปลอดภัย มีเฉพาะตัวแปรที่ขึ้นต้นด้วยREACT_ENV_เท่านั้น ดู: github.com/facebookincubator/create-react-app/blob/master/…
Mark Edington

7
@ MarkEdington ฉันคิดว่ามันควรจะเป็นREACT_APP_
นาย 14

5
@ Mr.14 ใช่แล้ว! มันคือ REACT_APP_ ไม่ใช่ REACT_ENV_
ทำเครื่องหมาย Edington

133

เมื่อใช้Node.jsคุณสามารถดึงตัวแปรสภาพแวดล้อมโดยใช้คีย์จากprocess.envวัตถุ:

ตัวอย่างเช่น

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

นี่คือคำตอบที่จะอธิบายการตั้งค่าตัวแปรสภาพแวดล้อมใน node.js


lib จำเป็นต้องใช้วิธีการดังกล่าวข้างต้น?
user_mda

3
@user_mda process.envถูกสร้างไว้ใน node.js api
Jason Axelson

ฉันเพิ่งจะตั้งค่าสิ่งที่ฉันต้องการใน process.env? เหตุใดผู้คนจึงตั้งค่าไว้ตรงข้ามกับว่าวัตถุปรับแต่งที่ต้องการ () 'ed by node.js?
PDN

3
process.env ให้คุณเข้าถึงชุดตัวแปรสภาพแวดล้อมที่ระดับระบบปฏิบัติการ สิ่งเหล่านี้สามารถตั้งค่าได้หลายวิธีและขึ้นอยู่กับตำแหน่งที่คุณปรับใช้แอพของคุณตัวอย่างเช่นฉันมักจะเรียกใช้แอพในเครื่องของฉันโดยใช้ NODE_ENV = development NODE_PATH = lib node server.js จากนั้น process.env.NODE_PATH จะส่งคืน 'lib'
NectarSoft

57

หากคุณต้องการใช้คีย์สตริงที่สร้างขึ้นในโปรแกรม Node.js คุณพูดคุณสามารถใช้var v = 'HOME' process.env[v]

มิฉะนั้นprocess.env.VARNAMEจะต้องฮาร์ดโค้ดในโปรแกรมของคุณ


ทำไมคุณมีprocess.env['HOME']?
AlgoRythm

35

เพื่อดึงตัวแปรสภาพแวดล้อมใน Node.JS คุณสามารถใช้process.env.VARIABLE_NAMEแต่อย่าลืมว่าการกำหนดคุณสมบัติบน process.env จะแปลงค่าให้เป็นสตริงโดยปริยาย

หลีกเลี่ยงตรรกะบูลีน

แม้ว่าไฟล์. env ของคุณจะกำหนดตัวแปรเช่นSHOULD_SEND = falseหรือSHOULD_SEND = 0ค่าจะถูกแปลงเป็นสตริง ( “ false” และ“ 0”ตามลำดับ) และไม่ตีความว่าเป็นบูลีน

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

คุณควรทำการตรวจสอบอย่างชัดเจนแทน ฉันพบขึ้นอยู่กับชื่อสภาพแวดล้อมไปไกล

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

1
ฉันชอบที่จะใช้ 'ใช่' และ 'ไม่' สำหรับ boolean env vars ซึ่งจะต้องตรวจสอบอย่างชัดเจน นี่เป็นการหลีกเลี่ยงปัญหาในภาษาการเขียนโปรแกรมจำนวนมาก
Dogweather

22

คุณสามารถใช้แพ็คเกจenvเพื่อจัดการตัวแปรสภาพแวดล้อมของคุณต่อโครงการ:

  • สร้าง.envไฟล์ภายใต้ไดเรกทอรีโครงการและวางตัวแปรทั้งหมดของคุณไว้ที่นั่น
  • เพิ่มบรรทัดนี้ที่ด้านบนของไฟล์รายการแอปพลิเคชันของคุณ:
    require('dotenv').config();

เสร็จสิ้น process.env.ENV_NAMEตอนนี้คุณสามารถเข้าถึงตัวแปรสภาพแวดล้อมของคุณด้วย


9
แพ็คเกจ dotenv นั้นมีประโยชน์ แต่คำถามที่ถามนั้นตอบโดยการอ่าน process.env.ENV_VARIABLE แพ็คเกจ dovenv นั้นเกี่ยวกับการโหลดการตั้งค่าจากไฟล์ลงในสภาพแวดล้อม
Robert Patterson

นั่นคือจุดของฉัน: จัดการและโหลดตัวแปร env จากenvไลบรารี
Huy Vo

1
คุณสามารถทำสิ่งเดียวกันในแบบที่ไม่ใช่ node.js โดยใช้envdirยูทิลิตี
Chris Johnson

คล้ายกับgithub.com/bitrise-io/envmanซึ่งไม่ใช่node-specific
MarkHu

1
คุณทำวันของฉัน! ขอบคุณมาก!
Vaha

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.