为什么我不应该在生产模式下使用 dotenv?

Avi*_*ash 17 node.js npm dotenv

为什么我不应该在生产模式下使用 dotenv ?

我在一些网站上看到了以下代码。但我不明白他们为什么要做这个条件检查。

if (process.env.NODE_ENV !== 'production') {
  require('dotenv').config();
}
console.log('Bla is :', process.env.Bla);(*)

Run Code Online (Sandbox Code Playgroud)

假设行(*)的输出不是生产模式下的 line(*) 的输出是 -> Bla 是 : Bla

如果 NODE_ENV 是生产环境,行 (*) 的输出是什么?(据我所知,我认为会的undefined

Vir*_*ngh 16

因为在生产中,您可能希望将环境变量直接设置到虚拟机中,因为您可能没有 ssh 访问权限,并且无法将 .env 文件推送到版本控制。就我而言,我使用的是 heroku 免费套餐,但无法通过 ssh 创建 .env 文件。因此,我在 Config Vars 设置中手动设置环境变量。

Heroku 虚拟机设置


Hen*_*ava 5

补充其他答案,您还会产生安全问题。您将对数据库连接、令牌和密码等信息进行版本控制(提交到 git)。在这种情况下,访问代码的每个人都能够连接到生产资源。

为了解决这个问题,在生产中,您可以直接在运行代码的实例上创建环境变量。

  • 无论您是否使用“dotenv” - 您都不应该将凭据推送到 git,这就是为什么大多数项目都会有一个“.env.example”,它用虚拟值“记录”支持的环境变量如果您将凭据推送到git...你可能做错了什么 (2认同)