Edge Runtime
Next.js 有兩個可在應用程式中使用的伺服器執行時
注意事項
- Edge 執行時不支援所有 Node.js API。某些軟體包可能無法按預期工作。
- Edge 執行時不支援增量靜態再生 (ISR)。
- 這兩個執行時都可以支援流式傳輸,具體取決於您的部署介面卡。
參考
Edge 執行時支援以下 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 格式以及從 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 特定 Polyfill
環境變數
您可以使用 process.env 訪問 環境變數,適用於 next dev 和 next build。
不支援的 API
Edge 執行時有一些限制,包括
- 原生 Node.js API 不支援。例如,您無法讀取或寫入檔案系統。
- 可以使用
node_modules,只要它們實現 ES 模組且不使用原生 Node.js API。 - 直接呼叫
require不允許。請改用 ES 模組。
以下 JavaScript 語言特性已被停用,將無法工作:
| API | 描述 |
|---|---|
eval | 評估以字串表示的 JavaScript 程式碼 |
new Function(evalString) | 使用作為引數提供的程式碼建立一個新函式 |
WebAssembly.compile | 從緩衝區源編譯 WebAssembly 模組 |
WebAssembly.instantiate | 從緩衝區源編譯和例項化 WebAssembly 模組 |
在極少數情況下,您的程式碼可能包含(或匯入)一些動態程式碼評估語句,這些語句無法在執行時到達,並且無法透過搖樹最佳化移除。您可以透過代理配置放寬檢查以允許特定檔案
proxy.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 上執行,它們將丟擲並導致執行時錯誤。
這有幫助嗎?