跳至內容
應用程式路由器 (App Router)API 參考邊緣運行環境 (Edge Runtime)

邊緣運行環境 (Edge Runtime)

Next.js 邊緣運行環境用於中介軟體,並支援以下 API

網路 API

API說明
Blob代表一個二進位大型物件 (BLOB)
fetch擷取資源
FetchEvent代表一個擷取事件
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透過將某些字元的每個實例替換為代表該字元 UTF-8 編碼的一個、兩個、三個或四個跳脫序列,來編碼統一資源識別符 (URI)。
encodeURIComponent透過將某些字元的每個實例替換為代表該字元 UTF-8 編碼的一個、兩個、三個或四個跳脫序列,來編碼統一資源識別符 (URI) 組件。
Error表示嘗試執行語句或存取屬性時發生的錯誤。
EvalError表示全域函式 eval() 發生錯誤。
Float32Array表示 32 位元浮點數的類型化陣列。
Float64Array表示一個 64 位元浮點數的類型化陣列
Function表示一個函式
Infinity表示數學上的無限大值
Int8Array表示一個 8 位元有號整數的類型化陣列
Int16Array表示一個 16 位元有號整數的類型化陣列
Int32Array表示一個 32 位元有號整數的類型化陣列
Intl提供國際化和本地化功能的存取
isFinite判斷一個值是否為有限數字
isNaN判斷一個值是否為 NaN
JSON提供將 JavaScript 值與 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表示一個 8 位元無號整數的類型化陣列,其值被限制在 0-255 之間。
Uint32Array表示一個 32 位元無號整數的類型化陣列
URIError表示在全域 URI 處理函式使用錯誤時發生的錯誤
URL表示一個提供用於建立物件 URL 的靜態方法的物件
URLPattern表示一個 URL 模式
URLSearchParams表示一個鍵/值對的集合
WeakMap表示一個鍵/值對的集合,其中鍵是被弱引用的
WeakSet表示一個物件的集合,其中每個物件只能出現一次
WebAssembly提供對 WebAssembly 的存取

Next.js 特定的 Polyfills

環境變數

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

不支援的 API

Edge Runtime 有一些限制,包括:

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

以下 JavaScript 語言功能已停用,並且無法使用:

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

在極少數情況下,您的程式碼可能包含(或導入)一些在執行階段無法觸及且無法透過 Tree Shaking 移除的動態程式碼評估陳述式。您可以放寬檢查,允許使用中介軟體設定的特定檔案

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 上執行,它們將會拋出錯誤並導致執行階段錯誤