跳至内容

Edge 运行时

Next.js 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表示逻辑实体,可以有两个值:truefalse
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 格式转换回 JavaScript 值的功能
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 devnext 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模块

在极少数情况下,您的代码可能包含(或导入)一些动态代码评估语句,这些语句*在运行时无法访问*,并且无法通过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上执行,*它们将抛出并导致运行时错误*。