Node.js 21现已发布!

Node.js 21现已发布!

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

Node.js 21发布,更新了V8引擎至11.8,稳定了fetch和WebStreams模块,并新增实验性WebSocket客户端。引入了--experimental-default-type标志以切换模块默认类型,改进了测试运行器,增强了性能。开发者应测试应用以确保与新版本兼容,建议升级至Node.js 18或20。

🔎

延伸解读

发布周期与升级建议

Node.js 21 将取代 Node.js 20 成为当前的“Current”版本,持续约6个月至2024年4月。Node.js 20 本月晚些时候进入长期支持(LTS)。Node.js 16 已结束生命周期,官方建议升级至 Node.js 18 或 20。开发者应测试应用以确保与新版本兼容。

模块系统默认类型的实验性切换

新增 --experimental-default-type 标志,可翻转 Node.js 默认的模块系统。原本隐式 CommonJS 的输入(如无 type 字段的 package.json、.js 文件等)在 --experimental-default-type=module 下会被解释为 ES 模块。已显式定义的类型不受影响。官方目标是最终默认支持 ES 模块语法,同时尽量减少破坏性变更。

HTTP 分块传输的性能优化

此前向分块响应写入时,每次 .write() 调用都会创建一个独立分块,即使响应被 cork 也会产生不必要的开销。本次优化后,在 uncork 响应时会将所有写入合并为单个分块,从而减少客户端和服务端的开销。例如多次写入会合并为一个分块,提升传输效率。

Web 互操作性与测试工具改进

Node.js 21 引入了全局 navigator 对象,增强 Web 互操作性,开发者可通过 navigator.hardwareConcurrency 获取硬件并发信息。测试运行器现在支持 glob 表达式,例如使用 node --test **/*.test.js 可灵活运行多个目录下的测试文件,提高测试效率。

❓

Q&A

Node.js 21的主要更新内容是什么?

Node.js 21更新了V8引擎至11.8,稳定了fetch和WebStreams模块,并新增实验性WebSocket客户端。

如何启用Node.js 21中的实验性WebSocket客户端?

可以通过--experimental-websocket标志启用实验性WebSocket客户端。

Node.js 21对性能有哪些改进?

Node.js 21优化了可写和可读流,减少了不必要的开销,提升了整体性能。

开发者在升级到Node.js 21时需要注意什么?

开发者应测试应用以确保与新版本兼容,并建议升级至Node.js 18或20。

Node.js 21中引入的--experimental-default-type标志有什么作用?

该标志用于切换模块的默认类型,影响隐式CommonJS模块的解释方式。

Node.js 21中新增的global navigator对象有什么用?

global navigator对象增强了Web互操作性,允许访问硬件并发信息。

🏷️

标签

➡️

继续阅读