Edge 运行时

Next.js 的 Edge 运行时基于标准 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表示可读流的读取器
ReadableStreamDefaultReader表示可读流的默认读取器
TransformStream表示转换流
WritableStream表示可写流
WritableStreamDefaultWriter表示可写流的默认写入器

加密 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 格式相互转换的功能
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 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 移除。你可以通过中间件或 Edge API 路由的导出配置来放宽检查,允许特定文件使用这些语句:

export const config = {
  runtime: 'edge', // 仅适用于 Edge API 路由
  unstable_allowDynamic: [
    // 允许单个文件
    '/lib/utilities.js',
    // 使用 glob 模式允许第三方模块 function-bind 中的所有内容
    '**/node_modules/function-bind/**',
  ],
}

unstable_allowDynamic 是一个 glob 模式或 glob 模式数组,用于忽略特定文件的动态代码执行检查。这些 glob 路径相对于应用程序根目录。

请注意,如果这些语句在 Edge 环境中执行,它们会抛出异常并导致运行时错误

On this page