读取Node.js中的环境变量


Answers:


1879
process.env.ENV_VARIABLE

ENV_VARIABLE您要访问的变量的名称在哪里。

请参阅Node.js文档process.env


4
请注意,这在节点进程及其子进程外部不可见。例如,如果您env在节点进程运行时在另一个外壳程序窗口中触发,或者在节点进程退出后在同一外壳程序中触发,则将不可见。
Marko Bonaci 2015年

17
这也适用于分配变量。 process.env.FOO = "foo";作品。
小鸡

16
值得一提的是,这在React应用程序中不起作用。process.env出于安全原因进行了消毒。仅以开头的变量REACT_ENV_可用。请参阅:github.com/facebookincubator/create-react-app/blob/master/...
马克·爱丁顿

7
@MarkEdington我认为应该是REACT_APP_

5
@ Mr.14你是对的!是REACT_APP_不是REACT_ENV_
Mark Edington

133

使用Node.js时,可以通过键从process.env对象中检索环境变量:

例如

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

这是解释在node.js中设置环境变量的答案


使用上述process.env方法需要什么库?
user_mda 2015年

3
@user_mda process.env内置在node.js api中。
杰森·阿克森

我是否只需要在process.env上设置任何内容?人们为什么在这里设置它而不是说由node.js实现require()的配置对象?
PDN

3
process.env使您可以在操作系统级别访问环境变量集。可以通过多种方式设置这些参数,具体取决于您在何处部署应用程序。例如,我经常使用NODE_ENV = development NODE_PATH = lib节点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 = falseSHOULD_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
我喜欢对布尔环境变量使用“是”和“否”,必须明确检查它们。这避免了许多编程语言中的问题。
Dogweather

22

您可以使用env包来管理每个项目的环境变量:

  • .env在项目目录下创建一个文件,并将所有变量放在此处。
  • 将此行添加到应用程序条目文件的顶部:
    require('dotenv').config();

做完了 现在,您可以使用来访问环境变量process.env.ENV_NAME


9
dotenv软件包很有用,但是通过阅读process.env.ENV_VARIABLE可以回答所问的问题。dovenv软件包仅用于将设置从文件加载到环境中。
罗伯特·帕特森

这就是我的观点:从env库中管理和加载环境变量。
Huy Vo '18

1
您可以使用该envdir实用程序以非特定于node.js的方式执行相同的操作。
克里斯·约翰逊

相似 github.com/bitrise-io/envman,它也不是node特定的。
MarkHu '18

1
你让我今天一整天都感觉很好!非常感谢!
Vaha

0

为什么不在.bash_profile文件的Users目录中使用它们,这样就不必将带有变量的任何文件推送到生产环境中?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.