【问题标题】:Why i should not use dotenv in production mode?为什么我不应该在生产模式下使用 dotenv?
【发布时间】:2021-08-08 18:21:59
【问题描述】:

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

我在一些网站上看到了以下代码。但我不明白他们为什么要进行这种状况检查。

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

假设 非生产模式中 line(*) 的输出是-> Bla 是:Bla

如果 NODE_ENV 是生产,那么 (*) 行的输出是什么? (据我所知,我想应该是undefined

【问题讨论】:

  • 当 NODE_ENV 处于生产状态时,最有可能将 var 配置为环境变量 :) 这就是为什么不在 prod 中时不需要调用 dotenv :) 在开发过程中,使用 .env 文件来保存所有vars(连接字符串、凭据等)和 dotenv 用于获取该文件的内容并将它们放在 process.env 上。* npmjs.com/package/dotenv

标签: node.js npm dotenv


【解决方案1】:

这背后的想法是 dotenv 通常用于开发人员工作站。这是一种使用平面文件(通常命名为“.env”)来覆盖环境文件的方法。您不在生产环境中使用它的原因是,在生产环境中,您通常会在 docker 容器或专用服务器中运行应用程序,您无需担心设置冲突的环境变量。

要回答实际问题,在这种情况下,该行的输出将是本地环境变量设置的任何值。如果未设置,则为undefined

【讨论】:

  • “如果没有设置,它只是一个空字符串”——实际上是undefined。您可以使用 node -e console.log(process.env.NON_EXISTANT_ENV) 自行测试
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      在这个例子中,它是开发者的偏好。没有什么可以阻止您使用它,但在生产环境中您可能已经设置了所有需要的环境变量。

      在这里,他们在测试和开发期间使用dotenv。这允许开发人员在编写应用程序时在 .env 文件中定义他们的环境变量,这对于防止在错误的数据库上工作很有用。

      所以这样想:

      开发或测试代码时,使用测试密钥,否则使用环境提供的密钥

      如果在运行 Node 之前没有设置环境变量 Bla,那么它将是 undefined,但它很可能配置为此代码所需的任何生产值,例如电子邮件或 API 密钥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-20
        • 1970-01-01
        • 2021-11-21
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 2014-04-24
        相关资源
        最近更新 更多