Node.js 21 版本已发布!

独角龙
• 阅读 841
本文翻译自 Node.js 21 is now available!,来源: The Node.js Project,略有删改。

我们很高兴地宣布Node.js 21的发布!亮点包括V8 JavaScript引擎更新到11.8, 稳定fetchWebStreams,一个新的实验性标志来切换模块默认值(--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的重要更改。 这两个模块在最近的更新后都被标记为稳定。

这将影响WebStreamsFormDataHeadersRequestResponsefetch

内置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团队在过去的一年里,我们一直在努力改进URLfetchstreamsnode:fsHTTP

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)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
VBox 启动虚拟机失败
在Vbox(5.0.8版本)启动Ubuntu的虚拟机时,遇到错误信息:NtCreateFile(\\Device\\VBoxDrvStub)failed:0xc000000034STATUS\_OBJECT\_NAME\_NOT\_FOUND(0retries) (rc101)Makesurethekern
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这