AWS
高级
选项

自定义构建命令

OpenNext 默认运行 package.json 中的 build 脚本。但是,如果需要,您可以指定自定义构建命令。

# 命令行
open-next build --build-command "pnpm custom:build"
// JavaScript
import { build } from "open-next/build.js";
 
await build({
  buildCommand: "pnpm custom:build",
});

自定义应用和构建输出路径

OpenNext 默认从当前命令文件夹运行 build 脚本。当在具有分散应用和构建输出路径的 monorepo 中运行 OpenNext 时,您可以指定自定义 appPath 和/或 buildOutputPath。这将允许您从 monorepo 的根目录执行命令。

# 命令行
open-next build --build-command "pnpm custom:build" --app-path "./apps/example-app" --build-output-path "./dist/apps/example-app"
// JavaScript
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%。

# 命令行
open-next build --minify
// JavaScript
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 可以在调试模式下执行以用于错误跟踪目的。

# 命令行
OPEN_NEXT_DEBUG=true npx open-next@latest build
// JavaScript
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 成本增加。