likes
comments
collection
share

Node.js 20.6 添加了对 .env 文件的内置支持

作者站长头像
站长
· 阅读数 14

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
评论
请登录