我在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,但是没有人能够弄清楚它为什么会发生。
答案 0 :(得分:15)
process.env.VARIABLE_NAME
返回undefined
,因为Node.js执行环境还不知道新添加的VARIABLE_NAME
。要解决此问题,Node.js执行环境(例如IDE)需要重新启动。
以下步骤可用于重现此问题:
console.log(process.env.VARIABLE_NAME)
。它会按预期打印undefined
,因为VARIABLE_NAME
尚未定义。保持IDE运行,不要关闭它。.bash_profile
并在其中添加export VARIABLE_NAME=mySensitiveInfo
。source .bash_profile
,以便执行上述export
语句。从现在开始,无论何时打开系统控制台,都存在VARIABLE_NAME
环境变量。mySensitiveInfo
。undefined
。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)
}
})
]