AWS
高级
选项

自定义构建命令

默认情况下,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,
});

该命令会执行以下操作:

  1. 构建输出中的 Lambda 处理函数将不会被压缩
  2. 构建输出中的 Lambda 处理函数会启用内联 sourcemap
  3. Lambda 处理函数会自动 console.log 记录请求事件对象及其他调试信息

建议在生产环境构建时关闭调试模式,因为:

  1. 未压缩的函数代码体积是压缩后的 2-3 倍,这会导致 Lambda 冷启动时间变长
  2. 每次请求都记录事件对象会产生大量日志写入 AWS CloudWatch,这将增加 AWS 费用