node.js 中的 require('dotenv').config()
Posted
技术标签:
【中文标题】node.js 中的 require(\'dotenv\').config()【英文标题】:require('dotenv').config() in node.jsnode.js 中的 require('dotenv').config() 【发布时间】:2020-06-14 06:40:09 【问题描述】:在我的 node.js 应用程序中,我有一个 require('dotenv').config();
行,我在本地开发时需要它以使用环境变量。但是,当我部署到 AWS 时,我需要注释掉这一行,否则应用程序会崩溃。目前我有 4 行这样的行,当我推/拉应用程序时必须继续评论/取消评论它们有点烦人 - 是否有任何解决方法可以消除在部署到 AWS 时必须继续删除行的需要/包括我在本地拉和工作时的线?
【问题讨论】:
【参考方案1】:也许你可以检查NODE_ENV
的值(我假设你部署在production
)。
类似:
if (process.env.NODE_ENV === 'development')
require('dotenv').config();
或者如果NODE_ENV
不是production
(如果你有NODE_ENV === 'test'
之类的东西很有用):
if (process.env.NODE_ENV !== 'production')
require('dotenv').config();
【讨论】:
NODE_ENV 是否应该在 AWS/开发中定义?我使用了一个 console.log 语句来查看它在开发中是未定义的——我可以在产品/开发中为这些使用不同的值,但是没有任何变量可以解决问题吗? 阅读NODE_ENV variable in Node.js 和Setting NODE_ENV="production" 了解NODE_ENV
。您是否使用任何工具/库进行开发,例如 nodemon?在生产环境中,如 AWS,NODE_ENV
应该是 production
。
但是 NODE_ENV 是必需的,我不能在产品/开发中使用任何具有不同值的变量吗?
没必要,比较方便的方式。它也是user environment 的值。【参考方案2】:
还请查看名为 config 的 npm 包。它为我们提供了多个 files.json,包括 default.json、development.json、local.json。在某些情况下,我们只需要更改开发或任何其他环境中的一些密钥,而我们希望所有环境中的东西都相同,例如端口、jwt 秘密等。看看链接
https://www.npmjs.com/package/config
【讨论】:
这种情况你也可以查看dotenv-defaults :)【参考方案3】:IMO 最好不要有检查 NODE_ENV
并在某些情况下加载内容的代码。
我把它放到一个专门的 npm 脚本中,比如 npm run dev
,在那里我会加载 dotenv/config
并在需要时设置 .env
文件的路径。
在您的情况下,package.json
可能看起来像
"scripts":
"dev": "node -r dotenv/config ./src/index.js"
奖励曲目:如果您的包的父文件夹中有 .env
文件 + 启用远程调试器:
"scripts":
"dev": "DOTENV_CONFIG_PATH=../.env node --inspect=0.0.0.0 -r dotenv/config ./src/index.js"
然后你只运行npm run dev
就可以了。
对于生产,我会添加一个不带调试器和 dotenv/config 加载的不同 npm 脚本。
【讨论】:
以上是关于node.js 中的 require('dotenv').config()的主要内容,如果未能解决你的问题,请参考以下文章
如何在 node.js 中的“require”之后删除模块?
node.js 中的 module.parent 有啥用?如何引用 require()ing 模块?
解决 Node.js 中的“Uncaught ReferenceError: require is not defined”错误