作者 | Bruno Couriol
译者 | 张卫滨
策划 | 丁晓昀  
Node.js 团队最近发布了 Node.js 22。核心特性包括增强与 JavaScript 原生模块和 Web API 的兼容性,以及性能方面的改进。
Node.js 21 已经支持关键的 JavaScript 模块 API,其中包括import.meta对象。具体来说,Node.js 21 支持import.meta.dirnameimport.meta.filename。Node.js 22 增加了对 JavaScript 模块(ESM)图同步require的支持。发布说明中提供了详细信息:
如果启用--experimental-require-modulerequire()加载的 ECMAScript 模块满足如下的需求:
  • 通过在闭包 package.json 或“.mjs”扩展文件中使用“type”: “module”字段明确标记为 ES 模块。
  • 完全同步(不包含顶层的 await)。
require()会以 ES 模块的形式加载所请求的模块,并返回模块命名空间对象。在这种情况下,它类似于动态的import(),但是会同步运行并直接返回命名空间对象。我们计划在未来默认启用require(esm),而不必使用标记。技术博主 CoderOasis 提供了一个简单的 代码示例 来说明该特性:
// ES module: math.js exportfunctionadd(a, b) { return a + b; } // CommonJS module: app.js const { add } = require('./math.js'); console.log(add(2, 3)); // Output: 5
Node.js 21 已经部分支持 Navigator API,并试验性地支持浏览器兼容的 Websocket 客户端。在 Node.js 22 中,对 Websocket 的支持仍然是试验性的,但现在它已默认启用,也就是说开发人员不必再使用标志来激活它了。Node.js 22 在性能方面继续取得了一定进展。
Node.js 22 将 V8 JavaScript 引擎更新到了 12.4 版本,它采用了名为 Maglev 的优化 JIT 编译器(介于现有的 Sparkplug 和 Turbofan 编译器之间)。12.4 版本的更新包括 WebAssembly 垃圾收集和 Iterator Helpers 等功能。通过将流的最高水位标志(High Water Mark)从 16KiB 提高到 64KiB,Node.js 流的性能也得到了改善。由于这略微增加了内存的使用量,对于内存敏感的环境,可通过 setDefaultHighWaterMark() 调整默认值。通过提高 AbortSignal 实例创建的效率,fetch() API 和测试执行器(runner)的性能得到了提升。
Node.js 是一款开源软件,在 Open JS 基金会) 的 MIT 许可证下可用。鼓励通过 Node.js 贡献指南 和行为准则提供贡献和反馈。
查看英文原文
Node.js 22 Released with Increased Support for ESM Modules and Web APIs (https://www.infoq.com/news/2024/05/node-22-released/)
声明:本文为 InfoQ 翻译,未经许可禁止转载。
今日好文推荐
继续阅读
阅读原文