Node.js 20.6支持.env配置文件,加入C++垃圾回收函式库Oilpan

最新版本 20.6.0 中,Node.js 现在内置了对 .env 文件的支持。现在,您可以将环境变量从 .env 文件加载到 process.env Node.js 应用程序中,完全无依赖。

加载 .env 文件现在非常简单:

node --env-file .env

什么是 .env ?

.env 文件用于配置将存在于正在运行的应用程序中的环境变量。这个想法来自十二因素应用程序方法,该方法说要存储环境中部署之间可能有所不同的所有内容(例如开发,暂存,生产)

配置不应是应用程序代码的一部分,也不应签入到版本控制中。API 凭据或其他机密等内容应单独存储,并加载到需要它们的环境中。通过文件, .env 可以管理在环境中设置变量不切实际的应用程序(如开发计算机或 CI)的配置。

有许多不同的语言的库支持使用 .env 文件将变量加载到环境中,它们通常被称为“dotenv”,Node.js dotenv 也不例外。但是现在,Node.js本身支持这种行为。

如何在 Node.js 中使用 .env ?

文件 .env 如下所示:

PASSWORD=supersecret
API_KEY=84de8263ccad4d3dabba0754e3c68b7a
# .env files can have comments too

按照惯例,您可以将其 .env 保存在项目的根目录中,尽管您可以随意调用它。

然后,您可以通过启动 Node.js将文件中的变量设置为环境变量,并将 --env-file 标志指向您的 .env 文件。加载时,变量可用作 的属性 process.env

$ node --env-file .env
Welcome to Node.js v20.6.0.
Type ".help" for more information.
> console.log(process.env.PASSWORD)
supersecret
undefined
> console.log(process.env.API_KEY)
84de8263ccad4d3dabba0754e3c68b7a
undefined

支持的功能

dotenv 相比,现在的支持是相当基本的。例如:

  • 当前无法使用多行值
  • 不能使用变量扩展
  • 一次只能指定一个文件。Node.js 将仅使用传递的最后一个标志,因此在以下示例中,仅使用 from 的 .env.development 变量:
node --env-file .env --env-file .env.development

还有更多的工作要做,其中一些功能可能会添加。您可以在此处关注 GitHub 上的讨论

缺点

从 20.6.0 版本开始,文档指出,“如果在环境和文件中定义了相同的变量,则环境中的值优先。这是所有 dotenv 包默认的工作方式。但是,目前 Node.js 的实现并非如此,文件中的 .env 变量将覆盖环境。 有一个 PR 请求来纠正这个问题。

Node.js 实现的好处

尽管此实现缺少某些功能,但与使用第三方包相比,它具有一些优势。Node.js 在文件启动时加载和分析 .env 文件,因此您可以包含配置 Node 本身的环境变量例如 NODE_OPTIONS

因此,您可以拥有一个如下所示 .env 的文件:

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

然后,当您运行时 node --env-file=.env ,该进程将运行而不发出警告,它将激活 IP 地址 127.0.0.1:9229 上的检查器。

注意:不允许您放入 NODE_OPTIONS="--env-file .env" 。避免无限循环。

C++ 垃圾回收函式库 Oilpan

另外,Node.js C++扩充套件现在支持V8中的C++垃圾回收库Oilpan,并向开发者提供新的工具和指南,以便更好地整合和管理C++与JavaScript间的物件和资源。 也就是说,在20.6之后,Node.js添加一种新颖且更有效率的C++内存管理方法,不过,原有方法仍然可用。

V8团队在2021年释出Oilpan,其特点在于提供一种追踪垃圾收集机制,能够透过标记对象来确定活对象,并于回收阶段回收死掉的对象,Oilpan也支持对某些物件进行堆碎片整理(Compaction)功能。 整体来说,Oilpan简化了程序开发模型,有助解决内存泄漏和使用后释放的问题。

现在替Node.js应用程序编写C++扩充套件的开发者,也可以使用Oilpan,但官方提醒,Node.js只是打包了来自V8的Oilpan函式库,他们无法保证ABI(Application Binary Interface)稳定性,但是因为Oilpan在Chromium中经历多年考验,他们也认为不太可能会破坏ABI。 之后当Oilpan有足够多的外部和内部采用时,官方便会考虑将其列入ABI稳定性保证中。

Node.js 20.6也在其模块系统加入了一个新的API,提供新方法让开发者可以指定档案,自定义模块的Hook,这项新功能提供了一个灵活且强大的方法,允许开发者自定义模块加载和解析行为,并且在主应用执行绪和自定义Hook执行绪间,建立沟通渠道。

Node.js 不断改进中

去试试 Node.js 版本 20.6.0!版本 20 带来了新功能,例如稳定的测试运行器、模拟计时器和现在 .env 的文件支持,以及许多其他升级、修复和改进。版本 20 在 10 月成为 Node 的活动 LTS 版本.js,因此现在是测试这些新功能并开始考虑升级应用程序以利用的好时机。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willin 老王带你躺平养老

感谢你这么好看还这么慷慨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值