开发知识

Node.js 重大更新,你知道更新了啥?

来源: 前端充电宝  日期:2024-04-26 22:36:54  点击:28  属于:开发知识

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和测试运行器的性能。