Node.js 18 釋出,引入全域性 Fetch API 和核心測試執行器模組

2022-04-21 09:00:38

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 使用者端 ,且受到 的啟發。

此 API 的範例用法:

const res = await fetch('https://nodejs.org/api/documentation.json');
if (res.ok) {
  const data = await res.json();
  console.log(data);
}

通過此新增,可以使用以下全域性變數:fetchFormDataHeadersRequestResponse

  • 可以通過 --no-experimental-fetch 命令列標誌來禁用 API。
  • 該 API 將保持實驗性,直到新增更多測試覆蓋率,且 API 實現了儘可能多的規範。

Web Streams API(實驗性)

Node.js 現在在全域性範圍內公開了這意味著以下 API 可用:

  • ReadableStream, ReadableStreamDefaultReader, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableByteStreamController, ReadableStreamDefaultController, TransformStream, TransformStreamDefaultController, WritableStream, WritableStreamDefaultWriter, WritableStreamDefaultController, ByteLengthQueuingStrategy, CountQueuingStrategy, TextEncoderStream, TextDecoderStream, CompressionStream, DecompressionStream.

其他全域性 API

此外,以下 API 現在在全域性範圍內公開:

  • Blob-
  • BroadcastChannel-

測試執行器模組(實驗性)

引入新的 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 版本,該版本包括以下新功能:

  • 對 的改進
  • 函數
  • 和的效能改進

| |

展開閱讀全文