💡
本文档仍在编写中。部分内容可能缺失或不完整。
这也主要用于高级用例(覆盖某些默认设置、为另一个云提供商提供支持、创建自己的 IAC 组件...),大多数人不需要使用此功能。
常规
- 对于 node 运行时,您至少需要 Node 18。
- 对于 edge 运行时,您可以使用 Node 18+ 或启用了
node_compat标志的 cloudflare workers(Cloudflare workers 支持处于实验阶段) - Open-next 在 Windows 上运行不佳。我们建议使用 WSL2 或 Linux 虚拟机。
后端
每个后端都是一个单独的模块。可用后端如下:
- 服务器(Node 或 Edge 运行时)
- 中间件(如果手动设置为 external)
- 图像优化
- 重新验证
- 预热器
- 初始化器
所有这些后端都可以被覆盖以满足您的需求。它们在配置和使用方式上有一些共同点。
常见覆盖
每个自定义覆盖(非 string)共享 BaseOverride 类型,并需要这样包装:
type BaseOverride = {
name: string;
};
// 这是覆盖的类型
type LazyLoadedOverride<T extends BaseOverride> = () => Promise<T>;包装器
包装器是后端的主要入口点。这是包装器的类型:
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 服务器,不适合无服务器环境cloudflare- Cloudflare 包装器 - 用于 Cloudflare Worker
Aws Lambda 流式传输
如果您想在 lambda 中启用流式传输,需要使用此包装器。默认情况下未启用。
请注意,使用流式传输时可能会遇到一些意外行为。Aws Lambda 似乎会对响应应用一些缓冲。在某些罕见情况下,这可能意味着流式传输无法正常启动。这是 lambda 运行时本身的问题,但在这些情况下应该只会影响 TTFB(首字节时间)。请参阅此 GitHub 问题 (opens in a new tab)
转换器
转换器用于转换事件和结果。这是转换器的类型:
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转换到Responsenode- Node 转换器 - 从IncomingMessage转换到ServerResponsesqs-revalidate- SQS Revalidate 转换器 - 默认用于重新验证后端dummy- Dummy 转换器 - 不执行任何操作