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.LocaleAPI 的改进 Intl.supportedValuesOf函数- 类字段和私有类方法的性能改进
