Read environment variables in Node.js
是否有方法读取node.js代码中的环境变量?
比如python的os.environ['HOME']。
1
| process.env.ENV_VARIABLE |
其中,ENV_VARIABLE是要访问的变量的名称。
process.env见node.js文档。
- 注意,这在节点进程及其子进程之外是不可见的。例如,如果在节点进程运行时在另一个shell窗口中或在节点进程退出后在同一个shell中启动env,则不可见。
- 请在此处查看更多上下文。
- 这也适用于分配变量。process.env.FOO ="foo";工程。
- 值得一提的是,这在React应用程序中不起作用。为了安全起见,对process.env进行了消毒。只有以REACT_ENV_开头的变量可用。请参见:github.com/facebookfuncator/create react app/blob/master/…
- @Markedington我想应该是REACT_APP_。
- @14先生,你说得对!这是反应,不反应_
- 同样,对于使用Vue的每个人,您的env变量都需要以VUE_APP_作为前缀。
- @马尔科博纳西,谢谢你!!这几天来我一直在挣扎!
- 这将在启动时加载一次,是否有方法使其动态化?例如,当节点运行时,app_debug变量可以设置为true或false。
使用node.js时,可以通过键从process.env对象中检索环境变量:
例如
1 2
| var mode = process.env.NODE_ENV;
var apiKey = process.env.apiKey; // '42348901293989849243' |
下面是解释在node.js中设置环境变量的答案。
- 使用上述process.env方法需要什么lib?
- @用户process.env内置在node.js api中。
- 我只是在process.env上设置我想要的内容吗?为什么人们把它设置在那里,而不是说node.js需要()的配置对象?
- process.env允许您访问在操作系统级别设置的环境变量。这些可以以各种方式设置,并取决于您部署应用程序的位置。例如,我经常使用node_env=development node_path=lib node server.js运行本地应用程序。那么process.env.node_path将返回"lib"
如果要使用在node.js程序中生成的字符串键,例如,var v = 'HOME',则可以使用process.env[v]。
否则,process.env.VARNAME必须在程序中硬编码。
要在node.js中检索环境变量,可以使用process.env.variable_name,但不要忘记在process.env上分配属性会将值隐式转换为字符串。
避免布尔逻辑
Even if your .env file defines a variable like SHOULD_SEND=false or SHOULD_SEND=0, the values will be converted to strings ("false" and"0" respectively) and not interpreted as booleans.
1 2 3 4 5
| if (process.env.SHOULD_SEND) {
mailer.send();
} else {
console.log("this won't be reached with values like false and 0");
} |
相反,您应该进行明确的检查。我发现依赖环境的名字有很长的路要走。
1 2 3
| db.connect({
debug: process.env.NODE_ENV === 'development'
}); |
您可以使用env包管理每个项目的环境变量:
- 在项目目录下创建一个.env文件,并将所有变量。
- 在应用程序条目文件的顶部添加此行:require('dotenv').config();
完成。现在,您可以使用process.env.ENV_NAME访问环境变量。
- dotenv包是有用的,但问题的答案是读取process.env.env_变量。Dovenv包主要是将设置从文件加载到环境中。
- 这就是我的观点:从env库管理和加载env变量。
- 您可以使用envdir实用程序以非node.js特定的方式执行相同的操作。
- 类似于github.com/bitsrise-io/envman,它也不特定于node。
为什么不在.bash_概要文件的用户目录中使用它们,这样就不必将带有变量的任何文件推送到生产环境中。