Node.js 20.6 添加了对 .env 文件的内置支持
Node.js 20.6 添加了对该文件的内置支持 .env
。这是对该平台的一个出色补充,使我们能够 .env
直接从文件加载环境变量,而无需使用第三方包。虽然很高兴看到一流的支持,但仍然存在一些警告。
让我们看看它是如何工作的。假设您运行的是 Node 20.6,创建一个 .env 文件:
API_KEY="KEY"
DATABASE_URL="URL"
JavaScript
然后,您可以使用以下命令运行节点:
node --env-file .env index.js
这将使您能够访问 JavaScript 代码中 .env 文件中定义的变量。
// index.js
console.log(`Hello ${process.env.DATABASE_URL}`)
// URL
JavaScript
这就对了!想要有不同的生产配置吗?只需创建一个新文件并将其指向一个 .env.production
文件即可。
运行命令时的顺序很重要
执行脚本时要记住的一个小细节是,需要在文件名之前传入 env 文件。理想情况下,它应该是可以互换的,但事实并非如此。如果我们使用以下命令,则 env 文件将被忽略:
// .env file gets ignored in this case
node inex.js --env-file .env
注意事项
与所有实验性的东西一样,缺少一些东西。其中一些可能会导致人们使用 dotenv,直到添加对这些的支持。我会在这里提到它们,让你看看它们是否会破坏交易。您还可以关注GitHub 问题来跟踪缺少的功能支持。
没有多行支持
目前不支持多行环境变量。如果添加一个,它将是未定义的。
// .env
WORLD="Hello
World"
// index.js
console.log(`Hello ${process.env.WORLD}`)
// running the script
node --env-file=.env index.js
Hello undefined
环境和文件中定义了相同的变量
如果环境和文件中定义了相同的变量,则环境中的值优先。无法覆盖系统环境变量。
// .env
WORLD="foo"
// index.js
console.log(`Hello ${process.env.WORLD}`)
// running the script
export WORLD="bar"
node --env-file=.env index.js
Hello foo
没有变量引用/扩展
Node当前不支持变量扩展。如果尝试使用 $variable 引用另一个变量,它将将该变量输出为字符串。这可以在 dotenv 中使用dotenv-expand库实现。
// .env
WORLD="foo"
WORLD_BAZ=$WORLD
// index.js
console.log(`Hello ${process.env.WORLD_BAZ}`)
// running the script
node --env-file=.env index.js
Hello $WORLD
JavaScript
不支持 .env.vault
dotenv-vault是另一个流行的软件包,可让您加密您的秘密并及时解密文件。它们对于生产和 CIT 环境非常有帮助,但目前不受支持。
结论
Node.js 20.6 添加了对 .env 文件的内置支持,这对于 Node 社区来说是一个巨大的进步。希望它在不久的将来不会停留在实验阶段,我们很快就可以开始在我们的应用程序中使用它!
转载自:https://juejin.cn/post/7356235820460474394