本文翻译自 Node.js 21 is now available!,来源: The Node.js Project,略有删改。
我们很高兴地宣布Node.js 21的发布!亮点包括V8 JavaScript引擎更新到11.8, 稳定fetch
和WebStreams
,一个新的实验性标志来切换模块默认值(--experimental-default-type
),一个内置的WebSocket
客户端,我们的测试运行器的更多更新,等等!
Node.js 21将取代Node.js 20作为我们的"当前"发布线,当Node.js 20在本月晚些时候进入长期支持(LTS)时。 根据发布时间表,Node.js 21将在未来6个月内发布,直到2024年4月。
该项目继续在许多领域取得进展,许多新功能和修复流入现有的LTS版本。 因此,Node.js 21的更新日志中列出的更改仅代表了一小部分功能, 自上一次重大发布以来。
要下载Node.js 21.0.0,请访问:https://nodejs.org/en/download/current/
。您可以在https://nodejs.org/en/blog/release/v21.0.0
上找到发布信息, 它包含了这个版本中包含的提交的完整列表。
显著变化
Stable fetch/WebStreams
最近对Node.js的更新,版本21,包括对fetch
模块和WebStreams
的重要更改。 这两个模块在最近的更新后都被标记为稳定。
这将影响WebStreams
、FormData
、Headers
、Request
、Response
和fetch
。
内置WebSocket客户端
一个实验性的与浏览器兼容的WebSocket
实现。可以通过标志--experimental-websocket
启用该功能。但是正如任何实验性功能一样,它可能会有所变动。
V8 11.8
像往常一样,Node.js中包含了新版本的V8引擎(更新到11.8版本,这是Chromium 118的一部分),带来了更好的性能和新的语言功能,包括:
- Array grouping
- ArrayBuffer.prototype.transfer
- WebAssembly extended-const expressions
在Node.js测试运行器中支持globs
在最新的Node.js更新中,测试运行器引入了对glob
表达式的支持, 指定--test
参数。这意味着现在可以使用强大的glob
模式来更有效和灵活地运行测试。例如可以使用以下命令跨多个目录对扩展名为.test.js
的所有文件执行测试 类似于node --test **/*.test.js
的命令。
ESM: --experimental-default-type flag to flip module defaults
新的标志--experimental-default-type
可以用来切换Node.js使用的默认模块系统。 已经明确定义为ES
模块或CommonJS
的输入,例如由package.json
"type"
字段或.mjs/.cjs
文件扩展名或--input-type
标志不受影响。目前隐含的CommonJS
将被解释为--experimental-default-type=module
下的ES模块。
此外如果传递了--experimental-wasm-modules
并且文件以WebAssembly
前导\0asm
开始,则无扩展文件将被解释为WebAssembly
。
自定义模块 hook globalPreload 删除; 使用 register 和 initialize 代替
模块自定义 hook globalPreload
已被删除。使用register
将数据从应用程序线程发送到定制hook,以及initialize
hook来建立线程之间的通信信道。
在fs.writeFile函数中添加flush选项
写入文件时,数据可能不会立即刷新到永久存储。 这允许后续的读操作看到陈旧的数据。 此PR为'flush'
系列函数添加了一个fs.writeFile
选项,该选项强制将数据在成功写入操作结束时刷新。
性能
性能是运行时的重要属性,我们的@nodejs/performance
团队在过去的一年里,我们一直在努力改进URL
、fetch
、streams
、node:fs
和HTTP
。
Streams
在这个版本中,streams
维护者Robert Nagy
通过删除冗余检查来进一步优化streams
,利用位图,并以更有效的方式调度回调。
HTTP
以前当写入分块响应时,Node.js会为每个对.write(...)
的调用创建一个单独的块,不管他们的回答是否有问题这在客户端和服务器端都导致了不必要的开销。
此更改通过在取消响应时为所有对write(...)
的调用创建单个块来修复此问题。
集成 navigator Object
在 Node.js 21 中,我们引入了全局 navigator
对象,提升了 Web 互操作性。现在开发者可以通过 navigator.hardwareConcurrency
来访问硬件信息。
行动起来吧!
试试新的Node.js 21版本吧!使用Node.js 21测试您的应用程序和模块有助于确保您的项目未来与最新的Node.js更改和功能的兼容性。
另外值得注意的是,Node.js 16(LTS)已经结束生命周期,因此我们强烈建议您开始计划升级到Node.js 18(LTS)或Node.js 20(LTS)。
看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~
专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)