跳到內容

Edge Runtime

Next.js Edge 執行階段用於中介層,並支援以下 API

網路 API

API描述
Blob代表一個 blob
fetch提取資源
FetchEvent代表一個 fetch 事件
File代表一個檔案
FormData代表表單資料
Headers代表 HTTP 標頭
Request代表一個 HTTP 請求
Response代表一個 HTTP 回應
URLSearchParams代表 URL 搜尋參數
WebSocket代表一個 websocket 連接

編碼 API

API描述
atob解碼 base-64 編碼的字串
btoa將字串編碼為 base-64
TextDecoder將 Uint8Array 解碼為字串
TextDecoderStream可鏈式解碼器,用於串流
TextEncoder將字串編碼為 Uint8Array
TextEncoderStream可鏈式編碼器,用於串流

串流 API

API描述
ReadableStream代表一個可讀取串流
ReadableStreamBYOBReader代表 ReadableStream 的讀取器
ReadableStreamDefaultReader代表 ReadableStream 的讀取器
TransformStream代表一個轉換串流
WritableStream代表一個可寫入串流
WritableStreamDefaultWriter代表 WritableStream 的寫入器

加密 API

API描述
crypto提供對平台加密功能的訪問權限
CryptoKey代表一個加密金鑰
SubtleCrypto提供對常見加密原語的訪問權限,例如雜湊、簽名、加密或解密

Web 標準 API

API描述
AbortController允許您在需要時中止一個或多個 DOM 請求
Array代表一個值陣列
ArrayBuffer代表一個通用的、固定長度的原始二進制資料緩衝區
Atomics以靜態方法提供原子操作
BigInt代表一個具有任意精度的整數
BigInt64Array代表一個 64 位元有號整數的類型化陣列
BigUint64Array代表一個 64 位元無號整數的類型化陣列
Boolean代表一個邏輯實體,可以有兩個值:truefalse
clearInterval取消先前通過調用 setInterval() 建立的定時重複操作
clearTimeout取消先前通過調用 setTimeout() 建立的定時重複操作
console提供對瀏覽器除錯控制台的訪問權限
DataView代表 ArrayBuffer 的通用視圖
Date代表平台無關格式的單一時間點
decodeURI解碼先前由 encodeURI 或類似例程創建的統一資源標識符 (URI)
decodeURIComponent解碼先前由 encodeURIComponent 或類似例程創建的統一資源標識符 (URI) 組件
DOMException代表 DOM 中發生的錯誤
encodeURI通過將某些字符的每個實例替換為一個、兩個、三個或四個轉義序列來編碼統一資源標識符 (URI),這些轉義序列表示字符的 UTF-8 編碼
encodeURIComponent通過將某些字符的每個實例替換為一個、兩個、三個或四個轉義序列來編碼統一資源標識符 (URI) 組件,這些轉義序列表示字符的 UTF-8 編碼
Error代表嘗試執行語句或訪問屬性時發生的錯誤
EvalError代表關於全局函數 eval() 發生的錯誤
Float32Array代表一個 32 位元浮點數的類型化陣列
Float64Array代表一個 64 位元浮點數的類型化陣列
Function代表一個函數
Infinity代表數學上的無限值
Int8Array代表一個 8 位元有號整數的類型化陣列
Int16Array代表一個 16 位元有號整數的類型化陣列
Int32Array代表一個 32 位元有號整數的類型化陣列
Intl提供對國際化和本地化功能的訪問權限
isFinite確定一個值是否為有限數字
isNaN確定一個值是否為 NaN
JSON提供將 JavaScript 值轉換為 JSON 格式和從 JSON 格式轉換的功能
Map代表一個值集合,其中每個值可能只出現一次
Math提供對數學函數和常數的訪問權限
Number代表一個數值
Object代表作為所有 JavaScript 物件基礎的物件
parseFloat解析字串參數並傳回浮點數
parseInt解析字串參數並傳回指定進位制的整數
Promise代表非同步操作最終的完成(或失敗)及其結果值
Proxy代表用於為基本操作定義自訂行為的物件 (例如:屬性查找、賦值、列舉、函數調用等)
queueMicrotask將微任務加入佇列以供執行
RangeError代表當值不在允許值集合或範圍內時發生的錯誤
ReferenceError代表當引用不存在的變數時發生的錯誤
Reflect為可攔截的 JavaScript 操作提供方法
RegExp代表一個正規表示式,允許您匹配字元組合
Set代表一個值集合,其中每個值可能只出現一次
setInterval重複調用一個函數,每次調用之間有固定的時間延遲
setTimeout在指定的毫秒數後調用函數或評估表達式
SharedArrayBuffer代表一個通用的、固定長度的原始二進制資料緩衝區
String代表字元序列
structuredClone建立值的深層副本
Symbol代表一種獨特且不可變的資料類型,用作物件屬性的鍵
SyntaxError代表嘗試解釋語法無效的程式碼時發生的錯誤
TypeError代表當值不是預期類型時發生的錯誤
Uint8Array代表 8 位元無號整數的類型化陣列
Uint8ClampedArray代表鉗制在 0-255 範圍內的 8 位元無號整數的類型化陣列
Uint32Array代表 32 位元無號整數的類型化陣列
URIError代表當全域 URI 處理函數以錯誤方式使用時發生的錯誤
URL代表提供用於建立物件 URL 的靜態方法的物件
URLPattern代表 URL 模式
URLSearchParams代表鍵/值對的集合
WeakMap代表鍵/值對的集合,其中鍵是弱引用
WeakSet代表物件的集合,其中每個物件只能出現一次
WebAssembly提供對 WebAssembly 的存取

Next.js 特定 Polyfill

環境變數

您可以使用 process.env 來存取 環境變數,適用於 next devnext build

不支援的 API

Edge Runtime 有一些限制,包括

  • 原生 Node.js API **不支援**。 例如,您無法讀取或寫入檔案系統。
  • *可以* 使用 node_modules,只要它們實作 ES Modules 且不使用原生 Node.js API。
  • **不允許**直接調用 require。 請改用 ES Modules。

以下 JavaScript 語言功能已停用,並且**將無法運作:**

API描述
eval評估表示為字串的 JavaScript 程式碼
new Function(evalString)使用作為參數提供的程式碼建立新函數
WebAssembly.compile從緩衝區來源編譯 WebAssembly 模組
WebAssembly.instantiate從緩衝區來源編譯並實例化 WebAssembly 模組

在極少數情況下,您的程式碼可能包含(或導入)一些動態程式碼評估語句,這些語句*在運行時無法訪問*,並且無法通過 tree-shaking 移除。 您可以放寬檢查,以允許使用您的 Middleware 配置的特定檔案

middleware.ts
export const config = {
  unstable_allowDynamic: [
    // allows a single file
    '/lib/utilities.js',
    // use a glob to allow anything in the function-bind 3rd party module
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamic 是一個 glob,或一個 glob 陣列,用於忽略特定檔案的動態程式碼評估。 glob 相對於您的應用程式根資料夾。

請注意,如果這些語句在 Edge 上執行,*它們將會拋出錯誤並導致運行時錯誤*。