自定义构建命令
默认情况下,OpenNext 会执行 package.json 中的 build 脚本。但如有需要,您可以指定自定义构建命令。
# CLI
open-next build --build-command "pnpm custom:build"// JS
import { build } from "open-next/build.js";
await build({
buildCommand: "pnpm custom:build",
});自定义应用和构建输出路径
OpenNext 默认从当前命令所在文件夹执行 build 脚本。当在具有分散式应用和构建输出路径的 monorepo 中运行 OpenNext 时,您可以指定自定义的 appPath 和/或 buildOutputPath。这将允许您从 monorepo 的根目录执行命令。
# CLI
open-next build --build-command "pnpm custom:build" --app-path "./apps/example-app" --build-output-path "./dist/apps/example-app"// JS
import { build } from "open-next/build.js";
await build({
buildCommand: "pnpm custom:build",
appPath: "./apps/example-app",
buildOutputPath: "./dist/apps/example-app",
});压缩服务器函数
启用此选项将使用 node-minify (opens in a new tab) 库压缩服务器函数包中的所有 .js 和 .json 文件。根据应用大小,这可以将服务器函数包的体积减少约 40%。
# CLI
open-next build --minify// JS
import { build } from "open-next/build.js";
await build({
minify: true,
});此功能目前处于实验阶段,需要主动启用。它可以显著降低服务器函数的冷启动时间。经过全面测试并确认稳定性后,将会默认启用。
实验性 流式支持
启用此选项将为服务器函数启用流式支持。这是实验性功能,需要主动启用。它可以显著降低服务器函数的首字节到达时间。
请勿在生产环境中使用。更多信息请参阅此文档。
open-next build --streaming实验性功能 禁用 DynamoDB 缓存
启用此选项将禁用 DynamoDB 缓存。此为实验性功能,需要主动选择启用。这意味着 next/cache 的重新验证功能将无法工作。
open-next build --dangerously-disable-dynamodb-cache实验性功能 禁用增量缓存
禁用增量缓存会导致每次请求时整个页面都会重新验证。这将导致 ISR 和 SSG 页面处于不一致状态。如果仅使用 SSR 页面,可指定此选项。此操作也会同时禁用 DynamoDB 缓存。
open-next build --dangerously-disable-incremental-cache在同一个存储桶中复用资源和缓存
通常,资源文件会上传到存储桶的根目录。但在某些情况下,您可能希望将它们存储在存储桶的子文件夹中,例如:
- 使用预先存在的存储桶时;或
- 在同一存储桶中同时存储资源和缓存文件。
如果选择将资源文件上传到子文件夹(如 "assets"),请确保:
- 将图片优化函数的
BUCKET_KEY_PREFIX环境变量设置为assets - 将 CloudFront S3 源的 "origin path" 设置为
assets
同样地,如果决定将缓存文件上传到子文件夹(如 "cache"),请确保:
- 将服务器函数的
CACHE_BUCKET_KEY_PREFIX环境变量设置为cache
调试模式
OpenNext 可以在调试模式下执行以便进行问题追踪。
# CLI 命令行工具
OPEN_NEXT_DEBUG=true npx open-next@latest build// JS
import { build } from "open-next/build.js";
await build({
debug: true,
});该命令会执行以下操作:
- 构建输出中的 Lambda 处理函数将不会被压缩
- 构建输出中的 Lambda 处理函数会启用内联 sourcemap
- Lambda 处理函数会自动
console.log记录请求事件对象及其他调试信息
建议在生产环境构建时关闭调试模式,因为:
- 未压缩的函数代码体积是压缩后的 2-3 倍,这会导致 Lambda 冷启动时间变长
- 每次请求都记录事件对象会产生大量日志写入 AWS CloudWatch,这将增加 AWS 费用