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 中的 require() 是如何工作的?

node.js 中的 module.parent 有啥用?如何引用 require()ing 模块?

Node.js中require()单例

解决 Node.js 中的“Uncaught ReferenceError: require is not defined”错误

Node.js——require加载规则