Edge Runtime
Next.js 的 Edge Runtime 基於標準 Web API,支援以下 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 | 提供常見加密原語的存取權限,如雜湊、簽名、加密或解密 |
網頁標準 API
API | 描述 |
---|---|
AbortController | 允許您根據需求中止一個或多個 DOM 請求 |
Array | 表示一組值的陣列 |
ArrayBuffer | 表示一個通用的、固定長度的原始二進位資料緩衝區 |
Atomics | 提供原子操作作為靜態方法 |
BigInt | 表示具有任意精度的整數 |
BigInt64Array | 表示一個 64 位元有號整數的型別陣列 |
BigUint64Array | 表示一個 64 位元無號整數的型別陣列 |
Boolean | 表示一個邏輯實體,可以有兩個值:true 和 false |
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 | 表示一個被限制在 0-255 範圍內的 8 位元無號整數的型別陣列 |
Uint32Array | 表示一個 32 位元無號整數的型別陣列 |
URIError | 表示全域 URI 處理函式被錯誤使用時發生的錯誤 |
URL | 表示提供用於建立物件 URL 的靜態方法的物件 |
URLPattern | 表示一個 URL 模式 |
URLSearchParams | 表示鍵/值對的集合 |
WeakMap | 表示鍵/值對的集合,其中鍵是弱引用 |
WeakSet | 表示物件的集合,其中每個物件只能出現一次 |
WebAssembly | 提供對 WebAssembly 的存取 |
Next.js 專用 Polyfills
環境變數
你可以使用 process.env
來存取環境變數,適用於 next dev
和 next 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 模組 |
在極少數情況下,你的程式碼可能包含(或匯入)一些動態程式碼評估語句,這些語句在執行時無法到達且無法透過 treeshaking 移除。
你可以透過 Middleware 或 Edge API Route 的匯出配置來放寬檢查,允許特定檔案:
unstable_allowDynamic
是一個 glob 或 glob 陣列,用於忽略特定檔案的動態程式碼評估。這些 glob 是相對於你的應用程式根目錄的。
請注意,如果這些語句在 Edge 環境中執行,它們將拋出錯誤並導致執行時錯誤。