节点 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 并使用 nodemonnode 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 返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

给出一个二叉树的节点,返回该节点的前驱节点

给出一个二叉树的节点,返回该节点的前驱节点

web前端练习25----Dom1,元素节点(自己,父节点,子节点,兄弟节点),属性节点,文本节点

获取TreeView单击节点父节点的ID

DOM节点和DOM元素的区别

二叉树