内容提要
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互操作性,允许访问硬件并发信息。