节点 process.env.VARIABLE_NAME 返回未定义
Posted
技术标签:
【中文标题】节点 process.env.VARIABLE_NAME 返回未定义【英文标题】:Node process.env.VARIABLE_NAME returning undefined 【发布时间】:2017-12-08 12:06:14 【问题描述】:我在我的 mac 上使用环境变量来存储一些敏感凭据,并尝试通过 Node.js 访问它们。我将它们添加到我的环境配置文件中
export VARIABLE_NAME=mySensitiveInfo
当我使用echo $VARIABLE_NAME
时,我会收到正确的输出(我的敏感信息)。
但是,当我尝试使用 process.env.VARIABLE_NAME
在 Node 中访问同一个变量并尝试在控制台上打印出来时,我得到一个未定义的结果。
其他环境变量似乎没问题。例如,当我console.log(process.env.FACEBOOK_CALLBACK_URL)
时,它会将正确的值打印到我的控制台。我几天前添加了 FACEBOOK_CALLBACK_URL。
我必须重新启动我的机器还是什么?环境变量在 Node 中可用之前需要一定的时间吗?我在 SO 上看到的最接近的答案是 this post,但没有人能够弄清楚它为什么会发生。
【问题讨论】:
什么是环境配置文件?.bash_profile
?
你是如何运行 Node 程序的?
@JeremyRodi 我正在使用 Visual Studio Code 并使用 nodemon
或 node app.js
来启动我的程序。
@shaochuancs 我实际上在.bash_profile
不起作用之后添加了.profile
和.bash_profile
。所以现在我两者都有。
【参考方案1】:
process.env.VARIABLE_NAME
返回undefined
因为 Node.js 执行环境还不知道新添加的VARIABLE_NAME
。要解决此问题,需要重启 Node.js 执行环境(例如 IDE)。
以下步骤可用于重现此问题:
-
打开WebStorm等IDE,编写一个简单的Node.js程序:
console.log(process.env.VARIABLE_NAME)
。它将按预期打印undefined
,因为尚未定义VARIABLE_NAME
。保持 IDE 运行,不要关闭它。
打开环境配置文件如.bash_profile
并在其中添加export VARIABLE_NAME=mySensitiveInfo
。
打开系统控制台,运行source .bash_profile
,这样上面的export
语句就会被执行。从现在开始,只要打开系统控制台,VARIABLE_NAME
环境变量就会存在。
在系统控制台中,执行第1步的Node.js程序,会打印出mySensitiveInfo
。
切换到IDE并执行Node.js程序,会打印undefined
。
重启IDE并执行Node.js程序,这次会打印mySensitiveInfo
【讨论】:
只需取消 npm run watch 并再次运行 npm run watch 即可 重新启动 IDE 解决了我的问题 - 谢谢!【参考方案2】:nodemon.json
文件仅用于设置 nodemon 特定配置
因此,为了创建自定义环境变量,我们可以使用 dotenv 包
首先,安装dotenv包
npm install dotenv --save
之后在根目录下创建 .env 文件并包含如下环境变量
MONGO_ATLAS_PW=xxxxx
JWT_KEY=secret
最后,在您的 app.js
文件中,在导入之后插入。
require('dotenv').config()
然后你可以像这样使用环境变量
process.env.MONGO_ATLAS_PW
process.env.JWT_KEY
【讨论】:
【参考方案3】:我刚才遇到了一个问题,我用这个在 webpack config 中解决了它
const plugins = [
new webpack.NoEmitOnErrorsPlugin(),
// after compile global will defined `process.env` this Object
new webpack.DefinePlugin(
BUILD_AT : Date.now().toString(32),
DEBUG: process.env.NODE_ENV !== 'production',
'process.env':
'NODE_ENV': JSON.stringify(process.env.NODE_ENV || "development"),
'VARIABLE_NAME': JSON.stringify(process.env.VARIABLE_NAME)
)
]
【讨论】:
【参考方案4】:请检查 .env 文件的目录,如果它与您的 app.js 或 (abc.js) 位于同一文件中,则将 .env 移至上一级
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案5】:关闭代码 Runner 或 Ide 环境一次,然后重新打开。 如果您使用 VS 代码,请完全关闭它。 (或 CMD 或 Power Shell 或 ...)
【讨论】:
以上是关于节点 process.env.VARIABLE_NAME 返回未定义的主要内容,如果未能解决你的问题,请参考以下文章