邊緣運行環境 (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 | 表示一個邏輯實體,可以有兩個值: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 | 表示一個 8 位元無號整數的類型化陣列,其值被限制在 0-255 之間。 |
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 模組 |
在極少數情況下,您的程式碼可能包含(或導入)一些在執行階段無法觸及且無法透過 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 上執行,它們將會拋出錯誤並導致執行階段錯誤。
這個有幫助嗎?