跳到內容

Edge Runtime

Next.js Edge Runtime 用於中介層,並支援下列 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 或類似常式建立的 Uniform Resource Identifier (URI)
decodeURIComponent解碼先前由 encodeURIComponent 或類似常式建立的 Uniform Resource Identifier (URI) 元件
DOMException表示 DOM 中發生的錯誤
encodeURI透過將某些字元的每個實例替換為一個、兩個、三個或四個逸出序列(表示字元的 UTF-8 編碼)來編碼 Uniform Resource Identifier (URI)
encodeURIComponent透過將某些字元的每個實例替換為一個、兩個、三個或四個逸出序列(表示字元的 UTF-8 編碼)來編碼 Uniform Resource Identifier (URI) 元件
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 上執行,*它們將會拋出錯誤並導致執行階段錯誤*。