2

Node.js 20.6 新增对 .env 文件的内置支持

 3 weeks ago
source link: https://www.fly63.com/article/detial/12709
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Node.js 20.6 新增了对 .env 文件的内置支持。这对该平台来说是一个很好的补充,让我们能够直接从 .env 文件加载环境变量,而无需使用第三方软件包。

什么是.env 文件?

.env文件用于配置正在运行的应用程序中存在的环境变量。这个想法来自“The Twelve-Factor App”方法论,该方法论表示将在环境中的部署(例如开发、测试、生产)之间可能发生变化的所有内容存储起来。

配置不应成为应用程序代码的一部分,也不应签入版本控制。api 凭证或其他机密等内容应单独存储并加载到需要它们的环境中。文件.env可让您管理无法在环境中设置变量的应用程序的配置,例如开发计算机或CI。

许多不同语言的库都支持使用.env文件将变量加载到环境中,它们通常称为“dotenv”,Node.js常用的npm包有 cross-env, dotenv.

如何使用 .env 文件?

让我们看看它是如何工作的。假设您正在运行 Node 20.6,请创建一个 .env 文件:

API_KEY="KEY"
DATABASE_URL="URL"

然后,可以使用以下命令运行:

node --env-file .env index.js

这样,您就可以在 JavaScript 代码中访问 .env 文件中定义的变量。

// index.js
console.log(`Hello ${process.env.DATABASE_URL}`)

// URL

想要不同的生产配置?只需创建一个新文件,并将其指向 .env.production 文件即可。

运行命令的顺序

执行脚本时需要记住的一个小细节是,env 文件需要先于文件名传入。理想情况下,这两个文件可以互换,但事实并非如此。如果我们使用该命令,env 文件会被忽略:

// .env file gets ignored in this case
node inex.js --env-file .env

1、目前不支持多行环境变量。如果添加一个,它将是未定义的。

// .env
WORLD="Hello
World"

// index.js
console.log(`Hello ${process.env.WORLD}`)

// running the script
node --env-file=.env index.js
Hello undefined

2.如果环境变量和文件中定义的变量相同,则以文件中的值为准。系统环境变量无法覆盖该值。

// .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
注:20.7.0 版本对此进行了修改,环境变量中定义的值优先。

3.Node 目前不支持变量扩展。如果尝试使用 $variable 引用另一个变量,它将以字符串形式输出变量。在 dotenv 中,可以使用 dotenv-expand 库实现这一功能。

4.不支持 .env.vault:dotenv-vault 是另一个流行的软件包,可让您加密秘密并及时解密文件。它们对生产和 CIT 环境很有帮助,但目前不支持。

与dotenv对比

和dotenv相比,.env 文件支持的功能还相当基础。主要表现如下:

  • 您当前无法使用多行值
  • 不能使用变量扩展
  • 您一次只能指定一个文件。Node.js 将仅使用最后传递的 .env 文件,如下示例中,仅使用 .env.production 的变量:
node --env-file .env.development --env-file .env.production
  • 如果在环境和文件中定义了相同的变量,则环境中的值优先,Node.js 中 .env 的实现并非如此,而是会将环境中的覆盖掉。

随着 Node.js 版本迭代,.env 文件的特性支持还有很多工作要完善,并且可能会添加其中一些功能。

Node.js 实现的优势

尽管这种实现方式缺少一些功能,但与使用第三方软件包相比,它还是有一些优势。Node.js 会在启动时加载并解析 .env 文件,因此你可以在文件中加入配置 Node.js 本身的环境变量,如 NODE_OPTIONS。

NODE_OPTIONS="--no-warnings --inspect=127.0.0.1:9229"

注意:为了避免死循环,不要在 NODE_OPTIONS="--env-file .env.develpment" 配置你的 .env 文件。

大家可以积极去尝试 Node.js 20.6.0 版本带来的新功能,如稳定的测试运行器、模拟计时器和现在的 .env 文件支持,以及许多其他升级、修复和改进。

链接: https://www.fly63.com/article/detial/12709


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK