我们很高兴地宣布Node.js16正式发布!升级亮点包括V8JS引擎升级到9.0、预构建的AppleSilicon二进制文件以及一些额外的稳定API。image.png您可以在此处下载最新版本[1],或在UNIX上使用节点版本管理器[2]运行nvminstall16来安装它。可以在此处[3]找到Node.js博客中包含的变更日志。最初,Node.js16将取代Node.js15作为我们的“当前”版本。根据发布时间表[4],Node.js16将成为未来6个月的“当前”版本,然后在2021年10月升级到长期支持(LTS)。一旦升级到长期支持,它将以“Gallium”代号发布。提醒一下——Node.js12将长期支持到2022年4月,Node.js14将长期支持到2023年4月。Node.js10将在本月(2021年4月)结束生命。有关我们的发布计划或时间表的更多详细信息,请参见Node.js发布工作组存储库[5]。V8升级到9.0一如既往,新版本的V8JavaScript引擎带来了性能调整和改进,并使Node.js与JavaScript语言功能保持同步。在Node.jsv16.0.0中,V8引擎从Node.js15中的8.6升级到9.0。本次更新带来了ECMAScriptRegExp匹配索引,它提供了捕获字符串的开始和结束索引。当正则表达式带有/d标志时,可以通过匹配对象的.indices属性获取索引数组。>constmatchObj=/(Java)(Script)/d.exec('JavaScript');未定义>matchObj.indices[[0,10],[0,4],[4,10],groups:undefined]>matchObj.indices[0];//Match[0,10]>matchObj.indices[1];//Firstcapturegroup[0,4]>matchObj.indices[2];//Secondcapturegroup[4,10]复制代码V8For更多新特性和更新,请查看V8博客:v8.dev/[6]。稳定的定时器PromisesAPI定时器PromisesAPI提供了另一组返回Promise对象的定时器函数,无需使用util.promisify()。import{setTimeout}from'timers/promises';asyncfunctionrun(){awaitsetTimeout(5000);console.log('Hello,World!');}run();复制JamesSnell在Node.jsv15.0.0添加的代码这个功能(github.com/nodejs/node…[7]其他功能)我们发布时间表的性质意味着新功能大约每两周在“当前”发布行中发布一次。出于这个原因,最近的Node.js15版本中已经有了很多新增功能,但对于运行时来说还是比较新的。Node.js15最近发布的一些功能也将在Node.js16中提供,包括:API[8]npm7的标准Web加密实验实现(Node.jsv16.0.0中的npm7.10.0)Node-APIv8稳定的SourceMapv3Web平台atob(buffer.atob(data))和btoa(buffer.btoa(data))实现与旧版Web平台api兼容。新的编译器Node.js为几个不同的平台提供了预构建的二进制文件。对于每个主要版本,都会评估一个最小的工具链,并在适当的地方进行替换。Node.jsv16.0.0将是第一个支持AppleSilicon的预构建二进制文件。虽然我们将为Intel(darwin-x64)和ARM(darwin-arm64)架构提供单独的tarball,但macOS安装程序(.pkg)将作为“fat”(多架构)二进制文件分发。由于MacStadium为该项目提供了必要的硬件,这些二进制文件的生产版本成为可能。在我们基于linux的平台上,构建Node.js16的最低GCC版本为GCC8.3。Node.jsBUILDING.md[9]中记录了有关支持的工具链和编译器的详细信息。描述一个新的主要版本发布,这也是我们引入新的运行时过时的时候。Node.js项目旨在最大程度地减少任何重大更改对生态系统的破坏。该项目使用名为CITGM[10](金矿中的金丝雀)的工具来测试任何重大更改(包括弃用)对大量流行生态系统模块的影响,以提供额外的意见。Node.js16中值得注意的弃用包括运行时弃用process.binding()对某些核心模块的访问,例如process.binding('http_parser')。
