当前位置: 欣欣网 > 码农

Node.js 重大更新

2024-04-26码农

未经授权,禁止转载,转载请注明出处!

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 的发布计划如下:

    image.png

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