节点process.env.VARIABLE_NAME返回undefined

时间:2017-07-05 01:19:22

标签: node.js environment-variables

我在mac上使用环境变量来存储一些敏感凭据,并尝试通过Node访问它们。我用

将它们添加到我的环境配置文件中

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,但是没有人能够弄清楚它为什么会发生。

3 个答案:

答案 0 :(得分:15)

process.env.VARIABLE_NAME返回undefined,因为Node.js执行环境还不知道新添加的VARIABLE_NAME。要解决此问题,Node.js执行环境(例如IDE)需要重新启动。

以下步骤可用于重现此问题:

  1. 打开WebStorm等IDE,编写一个简单的Node.js程序:console.log(process.env.VARIABLE_NAME)。它会按预期打印undefined,因为VARIABLE_NAME尚未定义。保持IDE运行,不要关闭它。
  2. 打开环境配置文件,例如.bash_profile并在其中添加export VARIABLE_NAME=mySensitiveInfo
  3. 打开系统控制台并运行source .bash_profile,以便执行上述export语句。从现在开始,无论何时打开系统控制台,都存在VARIABLE_NAME环境变量。
  4. 在系统控制台中,执行步骤1中的Node.js程序,它将打印mySensitiveInfo
  5. 切换到IDE并执行Node.js程序,它将打印undefined
  6. 重新启动IDE并执行Node.js程序,这次它将打印mySensitiveInfo

答案 1 :(得分:3)

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

答案 2 :(得分:1)

我刚才遇到了问题,我在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)
     }
   })
]