💡
本文档仍在完善中,部分内容可能缺失或不完整。
这些内容主要面向高级使用场景(覆盖某些默认配置、为其他云服务商提供支持、创建自定义基础设施即代码组件等),大多数用户不需要使用这些功能。
概述
- 对于 Node 运行时,至少需要 Node 18 版本
- 对于 Edge 运行时,可以使用 Node 18+ 或启用了
node_compat
标志的 Cloudflare workers(Cloudflare workers 支持目前处于实验阶段) - Open-next 在 Windows 系统上运行不佳,推荐使用 WSL2 或 Linux 虚拟机
后端模块
每个后端都是一个独立模块。目前可用的后端模块包括:
- 服务器(Node 或 Edge 运行时)
- 中间件(如果手动设置为外部)
- 图片优化
- 重新验证
- 预热器
- 初始化器
所有这些后端模块都可以根据需求进行覆盖定制。它们在配置和使用方式上有一些共通之处。
通用覆盖配置
所有自定义覆盖(非 string
类型)都共享 BaseOverride
类型,并需要按以下方式封装:
type BaseOverride = {
name: string;
};
// 这是覆盖配置的类型
type LazyLoadedOverride<T extends BaseOverride> = () => Promise<T>;
Wrapper(包装器)
Wrapper 是后端的主要入口点。以下是 Wrapper 的类型定义:
type WrapperHandler<
E extends BaseEventOrResult = InternalEvent,
R extends BaseEventOrResult = InternalResult,
> = (handler: OpenNextHandler<E, R>, converter: Converter<E, R>) => Promise<(...args: any[]) => any>;
export type Wrapper<
E extends BaseEventOrResult = InternalEvent,
R extends BaseEventOrResult = InternalResult,
> = BaseOverride & {
wrapper: WrapperHandler<E, R>;
supportStreaming: boolean;
};
其中:
handler
是被包装的原始处理器converter
是用于转换事件和结果的转换器
以下是提供的包装器列表:
aws-lambda
- 默认的 AWS Lambda 包装器(默认使用)aws-lambda-streaming
- 支持流式传输的 AWS Lambda 包装器node
- Node 包装器(创建一个 Node 服务器,不适用于 serverless 环境)cloudflare
- Cloudflare 包装器(用于 Cloudflare Worker)
Aws Lambda 流式传输
如需在 Lambda 中启用流式传输,需要使用此包装器。默认情况下未启用。
请注意,使用流式传输时可能会遇到一些意外行为。AWS Lambda 似乎会对响应应用一些缓冲处理。在极少数情况下,这可能导致流式传输无法正常启动。这是 Lambda 运行时本身的问题,但在这些情况下应该只会影响 TTFB(首字节时间)。详见此 GitHub issue (opens in a new tab)。
转换器 (Converter)
转换器用于对事件(event)和结果(result)进行转换。以下是转换器的类型定义:
export type Converter<
E extends BaseEventOrResult = InternalEvent,
R extends BaseEventOrResult = InternalResult,
> = BaseOverride & {
convertFrom: (event: any) => Promise<E>;
convertTo: (result: R, originalRequest?: any) => any;
};
convertFrom
方法用于将事件转换为后端内部处理器使用的内部事件。convertTo
方法用于将结果转换为预期格式。
当使用流式传输时,通常可以忽略 convertTo
方法,因为结果会直接进行流式传输。
以下是提供的转换器列表:
aws-apigw-v2
- 默认的 AWS API Gateway v2 转换器 - 这是默认转换器aws-apigw-v1
- AWS API Gateway v1 转换器aws-cloudfront
- AWS CloudFront 转换器 - 用于 lambda@edgeedge
- Edge 转换器 - 从Request
转换并输出Response
node
- Node 转换器 - 从IncomingMessage
转换并输出ServerResponse
sqs-revalidate
- SQS 重新验证转换器 - 默认用于重新验证后端dummy
- 虚拟转换器 - 不执行任何操作