Node.js 22发布,增强了对ESM模块和Web API的支持
Node.js 团队最近发布了 Node.js 22。核心特性包括增强与 JavaScript 原生模块和 Web API 的兼容性,以及性能方面的改进。
Node.js 21 已经支持关键的 JavaScript 模块 API,其中包括import.meta
对象。具体来说,Node.js 21 支持import.meta.dirname
和import.meta.filename
。Node.js 22 增加了对 JavaScript 模块(ESM)图同步require
的支持。发布说明中提供了详细信息:
如果启用 --experimental-require-module
,require()
加载的 ECMAScript 模块满足如下的需求:
通过在闭包 package.json 或“.mjs”扩展文件中使用“type”: “module”字段明确标记为 ES 模块。
完全同步(不包含顶层的 await)。
require()
会以 ES 模块的形式加载所请求的模块,并返回模块命名空间对象。在这种情况下,它类似于动态的import()
,但是会同步运行并直接返回命名空间对象。我们计划在未来默认启用require(esm)
,而不必使用标记。技术博主 CoderOasis 提供了一个简单的 代码示例 来说明该特性:
// ES module: math.js
export function add(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 翻译,未经许可禁止转载。
德国再次拥抱Linux:数万系统从windows迁出,能否避开二十年前的“坑”?
微信扫码关注该文公众号作者