Node.js 18 发布,引入全局 Fetch API 和核心测试运行器模块原创
Node.js 18 已发布,该版本的亮点包括将 V8 JavaScript 引擎更新到 10.1、默认启用全局 Fetch API 以及核心测试运行器模块。Node.js 18 是未来 6 个月的“当前”版本,然后在 2022 年 10 月升级为 LTS ,升级为 LTS 后将支持到 2025 年 4 月。
新的浏览器兼容 API
全局 Fetch API(实验性)
Node.js 18 默认提供一个实验性的全局 Fetch API,该实现来自 HTTP/1.1 客户端 undici ,且受到 node-fetch的启发。
此 API 的示例用法:
const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
const data = await res.json();
console.log(data);
}
通过此添加,可以使用以下全局变量:fetch
、 FormData
、Headers
、Request
、Response
。
- 可以通过
--no-experimental-fetch
命令行标志来禁用 API。 - 该 API 将保持实验性,直到添加更多测试覆盖率,且 API 实现了尽可能多的规范。
Web Streams API(实验性)
Node.js 现在在全局范围内公开了Web Streams API 的实验性实现。这意味着以下 API 可用:
ReadableStream
,ReadableStreamDefaultReader
,ReadableStreamBYOBReader
,ReadableStreamBYOBRequest
,ReadableByteStreamController
,ReadableStreamDefaultController
,TransformStream
,TransformStreamDefaultController
,WritableStream
,WritableStreamDefaultWriter
,WritableStreamDefaultController
,ByteLengthQueuingStrategy
,CountQueuingStrategy
,TextEncoderStream
,TextDecoderStream
,CompressionStream
,DecompressionStream
.
其他全局 API
此外,以下 API 现在在全局范围内公开:
Blob
- https://nodejs.org/api/buffer.html#class-blobBroadcastChannel
- https://nodejs.org/api/worker_threads.html#class-broadcastchannel-extends-eventtarget
测试运行器模块(实验性)
引入新的 node:test
模块,有助于创建以 TAP 格式报告结果的 JavaScript 测试。可通过 import test from 'node:test';
引入该模块。以下是具有两个子测试的父测试示例:
test('top level test', async (t) => {
await t.test('subtest 1', (t) => {
assert.strictEqual(1, 1);
});
await t.test('subtest 2', (t) => {
assert.strictEqual(2, 2);
});
});
注意:测试运行器模块只能使用node:
前缀,node:
前缀表示加载核心模块,省略前缀并导入'test'
会尝试加载用户区模块。
在文档中阅读该测试运行器的更多内容。
工具链和编译器升级
Node.js 为几个不同的平台提供了预构建的二进制文件。
- Linux 的预构建二进制文件现在基于 Red Hat Enterprise Linux (RHEL) 8 构建,且与基于 glibc 2.28 或更高版本的 Linux 发行版兼容,例如 Debian 10、RHEL 8、Ubuntu 20.04。
- macOS 的预构建二进制文件需要 macOS 10.15 或更高版本。
- 对于 AIX,支持的最低架构从 Power 7 提升到 Power 8。
- 由于在 Node.js 中构建 V8 依赖项的问题,用于 32 位 Windows 的预构建二进制文件将不可用。
V8 更新到 10.1
V8 引擎更新到 10.1 版本,该版本包括以下新功能:
- findLast() 和 findLastIndex() 数组方法
- 对
Intl.Locale
API 的改进 Intl.supportedValuesOf
函数- 类字段和私有类方法的性能改进