Edge 运行时
Next.js Edge Runtime 用于中间件并支持以下 API:
¥The Next.js Edge Runtime is used for Middleware and supports the following APIs:
网络 API
¥Network APIs
API | 描述 |
---|---|
Blob | 代表一个斑点 |
fetch | 获取资源 |
FetchEvent | 代表一个 fetch 事件 |
File | 代表一个文件 |
FormData | 代表表单数据 |
Headers | 表示 HTTP 标头 |
Request | 代表一个 HTTP 请求 |
Response | 代表一个 HTTP 响应 |
URLSearchParams | 代表 URL 搜索参数 |
WebSocket | 代表一个 websocket 连接 |
编码 API
¥Encoding APIs
API | 描述 |
---|---|
atob | 解码 Base-64 编码的字符串 |
btoa | 以 base-64 编码字符串 |
TextDecoder | 将 Uint8Array 解码为字符串 |
TextDecoderStream | 流的可链式解码器 |
TextEncoder | 将字符串编码为 Uint8Array |
TextEncoderStream | 流的可链式编码器 |
流 API
¥Stream APIs
API | 描述 |
---|---|
ReadableStream | 代表一个可读的流 |
ReadableStreamBYOBReader | 代表 ReadableStream 的读取者 |
ReadableStreamDefaultReader | 代表 ReadableStream 的读取者 |
TransformStream | 代表一个变换流 |
WritableStream | 代表一个可写流 |
WritableStreamDefaultWriter | 代表 WritableStream 的写入者 |
加密 API
¥Crypto APIs
API | 描述 |
---|---|
crypto | 提供对平台加密功能的访问 |
CryptoKey | 代表一个加密密钥 |
SubtleCrypto | 提供对常见加密原语的访问,例如散列、签名、加密或解密 |
网络标准 API
¥Web Standard APIs
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 | 表示数学上的 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 特定 Polyfill
¥Next.js Specific Polyfills
环境变量
¥Environment Variables
对于 next dev
和 next build
,你可以使用 process.env
访问 环境变量。
¥You can use process.env
to access Environment Variables for both next dev
and next build
.
不支持的 API
¥Unsupported APIs
Edge Runtime 有一些限制,包括:
¥The Edge Runtime has some restrictions including:
-
不支持原生 Node.js API。例如,你无法读取或写入文件系统。
¥Native Node.js APIs are not supported. For example, you can't read or write to the filesystem.
-
可以使用
node_modules
,只要它们实现 ES 模块并且不使用原生 Node.js API。¥
node_modules
can be used, as long as they implement ES Modules and do not use native Node.js APIs. -
不允许直接调用
require
。请改用 ES 模块。¥Calling
require
directly is not allowed. Use ES Modules instead.
以下 JavaScript 语言功能已被禁用并且无法工作:
¥The following JavaScript language features are disabled, and will not work:
API | 描述 |
---|---|
eval | 评估以字符串表示的 JavaScript 代码 |
new Function(evalString) | 使用作为参数提供的代码创建一个新函数 |
WebAssembly.compile | 从缓冲区源编译 WebAssembly 模块 |
WebAssembly.instantiate | 从缓冲区源编译并实例化 WebAssembly 模块 |
在极少数情况下,你的代码可能包含(或导入)一些动态代码评估语句,这些语句在运行时无法访问,也无法通过树摇动删除。你可以放宽检查以允许使用中间件配置的特定文件:
¥In rare cases, your code could contain (or import) some dynamic code evaluation statements which can not be reached at runtime and which can not be removed by treeshaking. You can relax the check to allow specific files with your Middleware configuration:
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 与你的应用根文件夹相关。
¥unstable_allowDynamic
is a glob, or an array of globs, ignoring dynamic code evaluation for specific files. The globs are relative to your application root folder.
请注意,如果这些语句在 Edge 上执行,它们将抛出并导致运行时错误。
¥Be warned that if these statements are executed on the Edge, they will throw and cause a runtime error.