未经授权,禁止转载,转载请注明出处!
4 月 24 日,Node.js 发布了 v22。Node.js 22 的更新亮点包括使用
require()
来导入 ESM 模块、WebSocket 客户端、V8 JavaScript 引擎的更新等!
Node.js 22 正式接替 Node.js 21,成为当前的发布主线。在接下来的六个月里,它将作为当前发布版(Current),直到2024 年 10 月,届时将转为活跃状态(Active)。
下面就来看看 Node.js 22 的更新内容 以及 Node.js 版本更新情况 !
Node.js 版本说明
Node.js 的发布可以分为三个阶段:
Current(当前) :包含大部分进入 nodejs/node 主分支的非主要(非破坏性)变更。
Active LTS(活跃长期支持) :新功能、错误修复和经LTS团队审核后被确定适合该发布线路且稳定的更新。
Maintenance(维护) :关键错误修复和安全更新。新功能可能会根据LTS团队的判断加入。通常只在新功能支持迁移到后续发布线路的情况下才会添加。
Node.js 奇数和偶数版本的区别如下:
奇数版本适合在特定环境下进行早期功能测试,而偶数版本则适用于生产部署;
偶数最终会成为 LTS 版本。而奇数版本也不会被提升为 LTS 版本,也就不会经历「Active LTS」和「Maintenance」阶段。
Node.js 每年 10 月发布奇数版本,次年 4 月发布偶数版本,
注意,Node.js 18 将于 2025 年 4 月停止维护,因此建议开始规划升级到Node.js 20(长期支持版本LTS)或即将成为LTS 的 Node.js 22。
Node.js 的发布计划如下:
Node.js 22 更新内容
V8 JavaScript 引擎升级至 v12.4
:该版本新增了WebAssembly垃圾回收、
Array.fromAsync
方法、
Set
方法增强以及迭代器助手等特性,为 Node.js 22带来更强大的性能和更丰富的功能。;
V8的Maglev编译器 :现在已在支持的架构上默认启用,显著提升了短生命周期CLI程序的执行性能;
使用 require() 来导入 ESM 模块
:Node.js 22新增了对同步ESM进行
require()
操作的支持,通过启用实验性标志
--experimental-require-module
,开发者可以更加便捷地同时服务CJS和ESM用户,从而推动模块系统的统一和简化。当启用该实验性标志后,Node.js 22允许
require()
加载满足特定条件的ES模块,这些条件包括在
package.json
中明确标注为ES模块或具有.mjs扩展名,并且模块中不包含顶层
await
,确保加载过程完全同步。这一改进使得
require()
能够像动态
import()
那样加载ES模块,并直接返回模块命名空间对象,为开发者提供了更高的灵活性和便利性。
运行package.json脚本
:Node.js 22引入了实验性功能,允许通过命令行标志
node --run <script-in-package-json>
执行
package.json
中的脚本,并支持
node --run test
来执行测试命令,为开发者提供了更便捷的方式来运行和管理项目脚本。
观察模式
:观察模式(
node --watch
)已稳定,该模式能够在文件变化时自动重启Node.js进程,方便开发者在开发过程中实时查看代码更改的效果。
WebSocket
:默认启用了与浏览器兼容的WebSocket实现,此前需要通过
--experimental-websocket
标志启用。这一改变为Node.js提供了一个内置的WebSocket客户端,无需额外依赖,简化了 WebSocket 的使用。
新增glob和globSync函数
:在
node:fs
模块中添加了
glob
和
globSync
函数,用于模式匹配。开发者现在可以利用这些函数根据指定的模式匹配文件路径。
优化AbortSignal实例的创建性能
:提升了
AbortSignal
实例的创建效率,从而显著改善了
fetch
和测试运行器的性能。