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 | 代表一個邏輯實體,可以有兩個值:true 和 false |
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 dev
和 next 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 上執行,*它們將會拋出錯誤並導致運行時錯誤*。
這有幫助嗎?