我们很高兴地宣布 Node.js 16 正式发布了!升级重点包括 V8 JS 引擎升级至 9.0,预构建的 Apple Silicon 二进制文件,还有一些额外的稳定 API。
你可以在 这里[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 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 提供了另一组返回 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')
。
[1]
这里: https://nodejs.org/en/download/current/
[2]Node 版本管理器: https://github.com/nvm-sh/nvm
[3]这里: https://nodejs.org/en/blog/release/v16.0.0
[4]发布时间表: https://github.com/nodejs/Release#release-schedule
[5]Node.js 发布工作组仓库: https://github.com/nodejs/release
[6]v8.dev/: https://v8.dev/
[7]github.com/nodejs/node…: https://github.com/nodejs/node/pull/33950%EF%BC%89%EF%BC%8C%E5%9C%A8%E6%9C%AC%E6%AC%A1%E6%9B%B4%E6%96%B0%E4%B8%AD%EF%BC%8C%E5%AE%83%E4%BB%AC%E4%BB%8E%E5%AE%9E%E9%AA%8C%E7%8A%B6%E6%80%81%E8%BF%87%E6%B8%A1%E5%88%B0%E7%A8%B3%E5%AE%9A%E7%8A%B6%E6%80%81%E3%80%82
[8]Web Crypto API: https://www.w3.org/TR/WebCryptoAPI/
[9]BUILDING.md: https://github.com/nodejs/node/blob/v12.x/BUILDING.md#platform-list
[10]CITGM: https://github.com/nodejs/citgm
转自:Jacob是我了
https://juejin.cn/post/6957316675918102558