如何使用 dotenv 从 .env 和 .env.local 加载环境变量?

Adr*_*ian 31 node.js npm dotenv

这可能看起来像一个新手问题,但我无法找到使用 dotenv 从节点中的 .env 和 .env.local 文件加载环境变量的方法。

有可能吗?如果不使用 dotenv,现在人们如何从这两个文件加载环境变量?

Ven*_*h A 37

引用自 dotenv 的 npm 页面

我应该有多个 .env 文件吗?

不可以。我们强烈建议不要使用“主”.env 文件和“环境”.env 文件(例如 .env.test)。您的配置应该在部署之间有所不同,并且您不应该在环境之间共享值。

但要使用 .env.local 或 .env.test 或任何其他环境.. 一次一个是

require('dotenv').config({ path: `.env.${process.env.NODE_ENV}` })
Run Code Online (Sandbox Code Playgroud)

如果您仍然想这样做,请参阅 https://www.npmjs.com/package/dotenv-flow上的 dotenv-flow

dotenv-flow 具有覆盖环境变量的功能。

  • 只是一个小小的疑问。如果我们使用 process.env 对象来引用节点环境,我们是否在操作系统级别调用脚本/应用程序的位置设置节点环境?我一直使用 .env 文件来设置 NODE_ENV 值,因为我担心在同一实例上使用多个应用程序时操作系统级别的 env 变量可能会导致问题 (2认同)
  • 令人沮丧的是,这与 create-next-app 和 next.js 一般设置为默认运行的方式不一致,默认情况下仅查看 .env.local 文件。感觉每次有人试图自信地制定科技规则时,就有人已经打破了它 (2认同)
  • 对文档中的多个 .env 文件说“不”并不意味着它们是正确的。使用 .env.[whatever-environment] 有令人信服的理由,并且许多(大多数?)都认为这是最佳实践 (2认同)

mat*_*twg 18

如果.env.local文件存在dotenv将覆盖.env

dotenv.config();
dotenv.config({ path: `.env.local`, override: true });
Run Code Online (Sandbox Code Playgroud)