大家好,我是大家的林语冰。坚持阅读,一起变强!
Node 核心团队十分鸡冻地官宣 —— Node 22 正式发布!
本次版本升级的亮点包括但不限于:
require()
ESM 模块- V8 JS 引擎升级
- WebSocket 客户端
Node 22 会在今年 10 月份进入 LTS 长期支持,但在此之前,该版本是未来半年里的“当前”版本。
我们鼓励您深度学习 Node 22 最新版本提供的新功能和优点,并评估此版本对您的应用程序的潜在影响。Node 项目持续在多个领域齐头并进,许多新功能和修复已经融入到现有的 LTS 版本中。
因此,Node 22 的升级日志中概述的更改仅代表自上次主版本以来功能和工作的冰山一角。这篇 Node 团队官方博客将补充一些与这些变化相关的更广泛的工作和额外的背景信息。
免责声明
本文属于是语冰的直男翻译了属于是,略有删改,仅供粉丝参考。英文原味版请传送 。
重大更新
V8 JS 引擎升级到 12.4 版本
V8 12.4 版本的新功能包括但不限于:
Array.fromAsync()
新方法- 全新的
Set
方法 - JS 新功能:迭代器助手
- WebAssembly 垃圾收集
Maglev(磁悬浮)
V8 的 Maglev 编译器现在在支持架构上默认启动。Maglev 提高了短期 CLI 程序的性能。
支持 require()
同步 ESM 模块图
Node 22 在 --experimental-require-module
标志下,新增了对同步 ESM 模块图的 require()
支持。
如果启动了 --experimental-require-module
,且 require()
加载的 ESM 模块满足下列要求:
- 在最近的
package.json
中使用了“type”:“module”
字段,或者使用了.mjs
扩展名,显式标记为 ESM 的模块。 - 完全同步的模块(不包含顶层
await
)。
require()
会将请求的模块作为 ESM 模块加载,并返回该模块的命名空间对象。在这种情况下,模块类似于动态 import()
,但会同步运行,且直接返回命名空间对象。
Node 团队打算未来最终默认启动 require(esm)
,而无需使用实验性标志。
运行 package.json
中的脚本
Node 22 新增了一个全新的实验性功能,允许使用 node --run <script-in-package-json>
cli 标志执行 package.json
中的脚本。
它还支持 node --run test
,允许执行 package.json
脚本中的测试命令。
Stream 默认的 High Water Mark
Node 22 将 stream(流)的默认 High Water Mark 从 16KiB 增加到 64KiB。
这提供了全面的性能提升,但代价 是更高的内存占用。鼓励内存敏感环境中的用户明确设置 setDefaultHighWaterMark
。
watch 模式(node --watch
)
从 Node 22 开始,watch mode(监视模式)趋于稳定。
当处于监视模式时,监视文件中的更改会导致 Node 进程重启。
WebSocket
默认情况下,Node 22 会启动 WebSocket 的浏览器兼容版实现,之前此功能需要 --experimental-websocket
标志。
这为 Node 提供了一个 WebSocket 客户端,而无需其他外部依赖。
glob
和 globSync
Node 22 向 node:fs
模块添加了用于模式匹配的函数:glob
和 globSync
。开发者现在可以利用这些函数根据指定模式匹配文件路径。
提高创建 AbortSignal
的性能
Node 22 提高了创建 AbortSignal
实例对象的效率,显著优化了 fetch
和测试运行程序的性能。
八方呼应
Node 核心团队诚邀您使用 Node 22 测试您的应用程序和模块,这有助于确保您的项目未来兼容最新的 Node 更改和功能。
粉丝请注意,Node 18 将于 2025 年 4 月终止生命周期,因此我们建议您未雨绸缪,开始升级到长期支持的 Node 20 或者即将长期支持的 Node 22。
本期话题是 —— 你最喜欢 Node 22 最新版本的哪个功能,或者你希望 Node 未来支持哪些新功能?
欢迎在本文下方自由言论,文明共享。
欢迎持续关注“前端俱乐部”,给前端以福利,给编程以复利。
如果你坚持读完全文,记得给自己点赞。同时谢谢大家给语冰点赞,我们下期再见,掰掰~