自从我成为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
软件包。
答案 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
设置为不导出的环境变量将不会在您调用的命令的环境中继承。
echo $SECRET
会显示输出。
但是当您env | grep "SECRET"
时,它不会显示给您,它不在您当前的bash环境中。
但是,如果您运行export SECRET=123
,那么它就在您的环境中。因此node
能够读取环境变量SECRET
。