我们很高兴地宣布 Node.js 16 正式发布了!升级重点包括 V8 JS 引擎升级至 9.0,预构建的 Apple Silicon 二进制文件,还有一些额外的稳定 API。
image.png
你可以在 这里[1] 下载最新版,或者使用 UNIX 上的 Node 版本管理器[2] 运行 nvm install 16 命令进行安装。Node.js 博客中包含的变更日志可以在 这里[3] 找到。
最初,Node.js 16 将会替代 Node.js 15 成为我们的「当前」发布版本。根据 发布时间表[4],Node.js 16 将是未来 6 个月的「当前』版本,然后在 2021 年 10月 升级为长期支持(LTS)。一旦升级为长期支持,将以 “Gallium” 的代号发布。
提醒一下 —— Node.js 12 将保持长期支持直到2022年4月,Node.js 14 将保持长期支持直到 2023 年 4 月。Node.js 10 将在这个月底(2021 年 4 月)结束生命。可以在 Node.js 发布工作组仓库[5]中找到关于我们的发布计划或者时间表的更多细节。
V8 升级至 9.0
和往常一样,V8 JavaScript 引擎的新版本带来了性能调整和改进,并使 Node.js 保持最新的 JavaScript 语言特性。在 Node.js v16.0.0 中,V8 引擎从 Node.js 15 中的 8.6 升级到 9.0。
这个更新带来了 ECMAScript RegExp 匹配索引,它提供了捕获字符串的开始和结束索引。当正则表达式具有 /d 标志时,索引数组可以通过匹配对象的 .indices 属性获得。
- > const matchObj = /(Java)(Script)/d.exec('JavaScript');
- undefined
- > matchObj.indices
- [ [ 0, 10 ], [ 0, 4 ], [ 4, 10 ], groups: undefined ]
- > matchObj.indices[0]; // Match
- [ 0, 10 ]
- > matchObj.indices[1]; // First capture group
- [ 0, 4 ]
- > matchObj.indices[2]; // Second capture group
- [ 4, 10 ]
- 复制代码
V8 中的更多新特性以及更新内容请查看 V8 博客:v8.dev/[6]。
稳定的 Timers Promises API
Timers Promises API 提供了另一组返回 Promise 对象的定时器函数,不再需要使用 util.promisify()。
- import { setTimeout } from 'timers/promises';
- async function run() {
- await setTimeout(5000);
- console.log('Hello, World!');
- }
- run();
- 复制代码
James Snell 在 Node.js v15.0.0 中添加了该特性(github.com/nodejs/node…[7]
其他特性
我们发布进度的本质意味着新特性大约每两周在「当前」发布版本线中发布一次。由于这个原因,最近的 Node.js 15 版本中已经提供了许多新添加的内容,但是对于运行时来说仍然是相对较新的。
Node.js 15 最近发布的一些特性,也将在 Node.js 16 中可用,包括:
标准 Web Crypto API[8] 的实验实现
npm 7(Node.js v16.0.0 中为 npm 7.10.0)
Node-API v8
稳定的 Source Map v3
Web 平台 atob(buffer.atob(data))和btoa(buffer.btoa(data))实现,以兼容遗留的 Web 平台 api
新的编译器
Node.js 为几种不同的平台提供了预构建的二进制文件。对于每个主要版本,最小的工具链被评估并在适当的地方被提出。
Node.js v16.0.0 将会是第一个支持 Apple Silicon 的预构建二进制文件。虽然我们将为 Intel(darwin-x64)和 ARM (darwin-arm64)架构提供单独的 tarball,但 macOS 安装程序(.pkg)将以 “fat”(多架构) 二进制文件的形式发布。
这些二进制文件的生产版本得以实现,要感谢 MacStadium 为该项目提供了必要的硬件。
在我们基于 linux 的平台上,构建 Node.js 16 的最低 GCC 版本将是 GCC 8.3。关于所支持的工具链和编译器的详细信息在Node.js BUILDING.md[9] 中有文档说明。
描述
一个新的主要版本发布,这也是我们介绍新的运行时废弃的时候。Node.js 项目旨在将任何破坏性改变对生态系统的破坏最小化。该项目使用名为 CITGM[10](金矿中的金丝雀)的工具来测试任何破坏性更改(包括弃用)对大量流行的生态系统模块的影响,以便在完成这些更改之前提供额外的见解。
Node.js 16 中值得注意的弃用包括运行时弃用一些核心模块的 process.binding() 访问,比如 process.binding('http_parser')。