NextJS中文文档 - Edge
Next.js 提供了两种服务器运行时环境,你可以在应用程序中使用:
- Node.js 运行时(默认),可以访问所有 Node.js API,用于渲染你的应用程序。
- Edge 运行时,包含更有限的 API 集合,用于 Middleware。
注意事项/nextjs-cn/
- Edge 运行时不支持所有 Node.js API。某些包可能无法按预期工作。
- Edge 运行时不支持增量静态再生成 (ISR)。
- 根据你的部署适配器,两种运行时都可以支持流式传输。
参考/nextjs-cn/
Edge 运行时支持以下 API:
网络 API
API | 描述 |
---|---|
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 | 表示逻辑实体,可以有两个值: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 | 表示被限制在 255 范围内的 8 位无符号整数的类型化数组 |
Uint32Array | 表示 32 位无符号整数的类型化数组 |
URIError | 表示全局 URI 处理函数被错误使用时的错误 |
URL | 表示提供用于创建对象 URL 的静态方法的对象 |
URLPattern | 表示 URL 模式 |
URLSearchParams | 表示键/值对的集合 |
WeakMap | 表示键/值对的集合,其中键被弱引用 |
WeakSet | 表示对象的集合,其中每个对象只能出现一次 |
WebAssembly | 提供对 WebAssembly 的访问 |
Next.js 特定的 Polyfills
环境变量
你可以使用 process.env
在 next dev
和 next build
中访问环境变量。
不支持的 API/nextjs-cn/
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 模块 |
在极少数情况下,你的代码可能包含(或导入)一些运行时无法访问且无法通过摇树优化删除的动态代码评估语句。 你可以通过 Middleware 配置放宽检查,允许特定文件:
javascript
export const config = {
unstable_allowDynamic: [
// 允许单个文件
'/lib/utilities.js',
// 使用 glob 模式允许 function-bind 第三方模块中的任何内容
'**/node_modules/function-bind/**',
],
}
unstable_allowDynamic
是一个 glob 模式或 glob 模式数组,忽略特定文件的动态代码评估。glob 模式相对于你的应用程序根文件夹。
请注意,如果这些语句在 Edge 上执行,它们将抛出并导致运行时错误。