Node.js 22 发布,增强对 ESM 模块和 Web API 的支持

Node.js 22 发布概述

Node.js 团队最近发布了 Node.js 22,主要特点包括增强了对 JavaScript 原生模块和 Web API 的兼容性,并进行了性能改进。

主要特性

  1. JavaScript 模块支持增强

    • Node.js 21 已经支持了关键的 JavaScript 模块 API,如 import.meta 对象,具体包括 import.meta.dirnameimport.meta.filename
    • Node.js 22 新增了对同步 require JavaScript 模块(ESM)图的支持。具体来说,如果启用了 --experimental-require-module 标志,并且 ECMAScript 模块满足以下条件:

      • 在最近的 package.json 中明确标记为 ES 模块("type": "module")或使用 .mjs 扩展名。
      • 完全同步(不包含顶层 await)。
    • require() 将加载请求的模块作为 ES 模块,并返回模块命名空间对象。类似于动态 import(),但同步执行并直接返回命名空间对象。未来计划默认启用 require(esm),无需标志。
  2. WebSocket 支持

    • Node.js 21 已经部分支持 Navigator API 和实验性的浏览器兼容 Websocket 客户端。
    • Node.js 22 中,Websocket 支持仍然是实验性的,但默认启用,开发者不再需要使用标志激活。

性能改进

  1. V8 引擎更新

    • Node.js 22 将 V8 JavaScript 引擎更新到 12.4 版本,引入了名为 Maglev 的优化 JIT 编译器,位于现有的 Sparkplug 和 Turbofan 编译器之间。
    • V8 12.4 版本新增了 WebAssembly 垃圾回收和迭代器助手(Iterator Helpers)等功能。
  2. 流性能提升

    • Node.js 流的性能通过将高水位标记(High Water Mark)从 16KiB 提高到 64KiB 得到改进。由于这会略微增加内存使用,内存敏感的环境可以通过 setDefaultHighWaterMark() 调整默认值。
  3. 其他性能改进

    • fetch() API 和测试运行器的性能通过提高 AbortSignal 实例创建的效率得到提升。

开源与贡献

Node.js 是 MIT 许可下的开源软件,由 Open JS Foundation 维护。鼓励通过 Node.js 贡献指南和行为准则进行贡献和反馈。

代码示例

以下是一个简单的代码示例,展示了 Node.js 22 的新特性:

// ES 模块: math.js  
export function add(a, b) {  
  return a + b;  
}  

// CommonJS 模块: app.js  
const { add } = require('./math.js');  
console.log(add(2, 3)); // 输出: 5  

总结来说,Node.js 22 在模块支持、Web API 兼容性和性能方面都有显著提升,进一步巩固了其在现代 JavaScript 生态系统中的地位。

阅读 172
0 条评论