为什么不应在生产模式下使用dotenv?
我在一些网站上看到了下面的代码。但是我不明白他们为什么要做这个条件检查。
if (process.env.NODE_ENV !== 'production') {
require('dotenv').config();
}
console.log('Bla is :', process.env.Bla);(*)
假设行()在非生产模式下的输出为-〉Bla为:布拉
如果NODE_ENV是生产,行()的输出是什么?(据我所知,我认为它将是undefined
)
5条答案
按热度按时间koaltpgm1#
因为在生产环境中,您可能希望直接在虚拟机中设置环境变量,因为您可能没有ssh访问权限,无法将.env文件推送到版本控制。在我的示例中,我使用的是heroku自由层,无法使用ssh创建.env文件。因此,我在Config Vars设置中手动设置了环境变量。
nafvub8i2#
补充其他的答案,你也会产生一个安全问题。你会对数据库连接、令牌和密码等信息进行版本控制(提交给git)。在这种情况下,每个访问代码的人都可以连接到生产资源。
为了解决这个问题,在生产环境中,您可以直接在运行代码的示例上创建env变量。
x6492ojm3#
dotenv通常用于开发人员工作站。它是一种使用平面文件(通常命名为.env)覆盖环境文件的方法。在生产环境中不使用它的原因是,在生产环境中,您通常会在docker容器或专用服务器中运行应用程序,无论是哪种情况,您都不必担心设置冲突的环境变量。
为了回答实际的问题,在本例中该行的输出将是本地环境变量设置为的任何值。如果它没有设置,它将只是
undefined
。m0rkklqb4#
在这个例子中,它是开发人员的首选项。没有什么可以阻止你使用它,但是在生产中,你可能已经设置了所有需要的环境变量。
在这里,他们在测试和开发过程中使用
dotenv
。这允许开发人员在编写应用程序时在.env
文件中定义他们的环境变量,这将有助于防止在错误的数据库上工作。你可以这样想:
在开发或测试代码时,请使用测试键,否则,请使用环境提供的键
如果在运行Node之前没有设置环境变量
Bla
,那么它将是undefined
,但它很可能被配置为该代码需要的任何生产值,如电子邮件或API密钥。idv4meu85#
从dotenv 2.0.0(在January 2016中发布)开始,我们不再需要if子句了。
默认情况下,我们不会修改任何已经设置的环境变量。特别是,如果您的
.env
文件中的变量与您环境中已经存在的变量冲突,则该变量将被跳过。我不会回答为什么我们不应该在生产中使用dotenv,因为它已经被其他答案回答了。我只想补充:不要在开发和生产中使用相同的数据库密码。