Node.js 22 现已正式发布,亮点包括 require()ing ES 模块、WebSocket 客户端、V8 JavaScript 引擎的更新等等。Node.js 22 将于 10 月份进入长期支持 (LTS),但在此之前,它将在接下来的六个月内作为“Current”版本。
一些更新亮点包括:
V8 更新至 12.4
V8 版本 12.4 包括 WebAssembly Garbage Collection、Array.fromAsync、Set 方法和迭代器助手等新功能。#52465
Maglev
V8 的 Maglev 编译器现在在支持的架构上默认启用 (https://v8.dev/blog/maglev)。 Maglev 提高了短期 CLI 程序的性能。#51360
Support require()ing synchronous ESM graphs
此版本在--experimental-require-module
标志下为同步 ESM 图添加了require()
支持。此版本require()
在 标记下添加了对同步 ESM 图的支持。
如果--experimental-require-module
启用,并且被require()
加载的 ECMAScript 模块满足以下要求:
- 在最近的 package.json 或 .mjs 扩展名中使用 "type": "module" 字段显式标记为 ES 模块。
- Fully synchronous(不包含 top-level await)。
require()
将会以 ES 模块的形式加载请求的模块,并返回模块名称空间对象。在这种情况下,它类似于动态 import()
,但同步运行并直接返回名称空间对象。项目团队计划在将来默认情况下启用require(esm)
,而不使用该标志。
#51977
运行 package.json 脚本
Node.js 22 包括一个新的实验性功能,用于使用 cli 标志node --run <script-in-package-json>
从package.json
中执行脚本。它还支持node --run test
,这会执行 package.json 脚本中的测试命令。它还支持在package.json
脚本中执行测试命令的node --run test
。#52190
Stream default High Water Mark
将流的默认 High Water Mark 从 16KiB 增加到 64KiB。这提供了全面的性能提升,但代价是内存使用量稍高。鼓励在内存敏感环境中的用户显式设置 setDefaultHighWaterMark
。#52037
Watch Mode (node --watch)
从这个版本开始,Watch Mode 被认为是稳定的。当处于 Watch Mode 时,监视文件中的更改会导致 Node.js 进程重新启动。#52074
WebSocket
WebSocket 的浏览器兼容实现(之前位于flag--experimental-websocket
标志之后)将默认启用。这将为 Node.js 提供无需外部依赖的 WebSocket 客户端。#51594
glob 和 globSync
此版本为node:fs
模块添加了用于模式匹配的glob
和globSync
函数。开发人员现在可以利用这些函数,根据指定的模式匹配文件路径。#51912
提高 AbortSignal creation 的性能
此版本提高了创建AbortSignal
实例的效率,从而显着提高了fetch
和测试运行程序的性能。#52505
值得注意的是,Node.js 18 将于 2025 年 4 月终止生命周期,因此官方建议用户开始计划升级到 Node.js 20 (LTS) 或 Node.js 22(即将成为 LTS)。
更多详情可查看发布公告。