Node.js 16已经于4月20日发布,主要包括如下更新:
- 升级V8引擎至9.0
- 预构建的Apple silicon二进制文件以支持使用苹果芯片的Mac系统
- 稳定部分API
详细更新日志可参考:https://nodejs.org/zh-cn/blog/release/v16.0.0/
可以在官网下载最新发布体验,或者使用版本管理工具(本文以跨平台的nvs为例)。
# 下载V16的Node.js
nvs add 16
# 在当前终端使用V16的Node.js(推荐)
nvs use 16
# 或者:设置全局默认的Node.js至V16
nvs link 16
Node.js 16将会替代15并于接下来半年成为当前发布线(期间可能会有部分非紧要的代码更新),之后将于十月份进入长期支持(LTS)阶段并将该版本命名为Gallium。PS:V12会在2022年4月结束LTS阶段,V14为2023年4月,V10将于本月结束LTS阶段。
V8引擎的升级
每次V8引擎的升级都会带来性能的调整与提升以及支持最新的JavaScript语言特性,因此Node.js会常态化更新V8版本,Node.js 16使用V8 9.0(15使用的是V8 8.6)。
这次V8的升级带来了ECMAScript RegExp比对索引功能,能提供字符串的开始与结束索引。当正则表达式带有/d
标签时,可以通过indices属性访问到索引数组。
更多V8更新请参考:https://v8.dev/
稳定Timers Promises API
Timers Promises API提供了可返回Promise对象的timer函数(无需再将timer通过util.promisify进行Promise化),该API于Node.js 15新增(本次发布将其从experimental状态更新为stable状态)。
import { setTimeout } from 'timers/promises';
async function run() {
const res = await setTimeout(3000, 'fullFilledValue');
console.log(`Get result=>${res} after 3s`);
}
run(); // 3s后输出:Get result=>fullFilledValue after 3s
其他特性
- 实现试验阶段的标准Web加密API
- npm 7
- NODE-API version 8
- 基于AbortController Web API的AbortController的稳定实现
- 稳定Source Maps v3
- 实现buffer.atob与buffer.btoa以兼容历史版本API,不推荐使用(使用Buffer.from(data, 'base64')与buf.toString('base64')替代)
新的编译器与平台最低要求
Node.js针对不同的平台提供预构建的二进制文件,对于每个主要版本,在适当的情况下评估并提出最少的工具链。
Node.js v16.0.0是首个为apple芯片交付预构建二进制文件的版本,虽然将分别为Intel(darwin-x64)和ARM(darwin-arm64)架构提供压缩包,但macOS安装程序(.pkg)将作为“fat”(多架构)二进制文件提供。在基于Linux的平台上,构建Node.js 16的最低GCC级别将为GCC 8.3。详情请参考Node.js BUILDING.md文件
弃用
Node.js项目使用名为CITGM(Canary in the Goldmine)的工具,测试任何重大变化(包括弃用)对大量流行生态系统模块的影响,以在执行这些变化之前提供更多的参考。Node.js v16主要的弃用包括对多个核心模块内部执行process.binding()
的运行时弃用,如process.binding(‘http_parser’)。