运行.env文件并从Node访问它们

时间:2020-01-09 08:04:05

标签: node.js linux unix environment-variables

自从我成为Linux用户10多年以来,这让我感到有些尴尬。但是,我遇到了一个我无法理解的问题。

假设我要公开一个环境变量SECRET,我可以使用 process.env.SECRET

我只写这是我启动应用程序所用的同一终端

# Linux bash
$ export SECRET=Ultr4Secr3t
$ echo $SECRET
$ > Ultr4Secr3t

然后运行节点应用nodejs app.js

// app.js
console.log(process.env.SECRET)
> Ultr4Secr3t

一切都很好!

但是我真的很想在仓库中添加一个.env文件。

示例.env文件

SECRET=Ultr4Secr3t
# Linux bash
$ . .env # On Mac we had to do ". ./.env"
$ echo $SECRET
$ Ultr4Secr3t

现在,当我运行应用程序时发生了奇怪的事情

然后运行节点应用nodejs app.js

// app.js
console.log(process.env.SECRET)
> undefined

为什么是undefined?我宁愿不必使用dotenv软件包。

3 个答案:

答案 0 :(得分:1)

您可以运行. .env而不是source .env,以便将.env文件中的bash变量也注册在您的主bash进程内,从该主bash进程启动节点进程并继承其环境变量。

答案 1 :(得分:0)

好吧,Node js本身不支持。 1)您可以在运行应用程序时在node命令中提供所有变量:

SECRET=Ultr4Secr3t node app.js

然后您可以通过process.env

进行访问

2)您可以将所有配置添加到config_file.json文件中,然后只需调整权限即可。而您所需要的只是const env = require('config_file')

答案 2 :(得分:0)

在运行. ./.env时,实际上是在“本地”设置它们。例如:

// .env
SECRET=123

设置为不导出的环境变量将不会在您调用的命令的环境中继承。

Source: January @ AskUbuntu

echo $SECRET会显示输出。 但是当您env | grep "SECRET"时,它不会显示给您,它不在您当前的bash环境中。

但是,如果您运行export SECRET=123,那么它就在您的环境中。因此node能够读取环境变量SECRET