Menu

Next.js CLI

Next.js CLI 允许你开发、构建、启动你的应用程序等。

基本用法:

Terminal
npx next [command] [options]

参考

以下选项可用:

选项描述
-h--help显示所有可用选项
-v--version输出 Next.js 版本号

命令

以下命令可用:

命令描述
dev以开发模式启动 Next.js,支持热模块替换、错误报告等功能。
build创建应用程序的优化生产构建,显示每个路由的信息。
start以生产模式启动 Next.js。应用程序应先使用 next build 编译。
info打印当前系统的相关详细信息,可用于报告 Next.js bug。
telemetry允许你启用或禁用 Next.js 的完全匿名遥测数据收集。
typegen为路由、页面、布局和 route handlers 生成 TypeScript 定义,无需运行完整构建。

值得注意的是:运行 next 而不带命令是 next dev 的别名。

next dev 选项

next dev 以开发模式启动应用程序,支持热模块替换(HMR)、错误报告等功能。运行 next dev 时可使用以下选项:

选项描述
-h, --help显示所有可用选项。
[directory]构建应用程序的目录。如果未提供,则使用当前目录。
--turbopack强制启用 Turbopack(默认启用)。也可使用 --turbo
--webpack使用 Webpack 代替默认的 Turbopack 打包器进行开发。
-p--port <port>指定启动应用程序的端口号。默认:3000,环境变量:PORT
-H--hostname <hostname>指定启动应用程序的主机名。对于使应用程序可供网络上其他设备访问很有用。默认:0.0.0.0
--experimental-https使用 HTTPS 启动服务器并生成自签名证书。
--experimental-https-key <path>HTTPS 密钥文件的路径。
--experimental-https-cert <path>HTTPS 证书文件的路径。
--experimental-https-ca <path>HTTPS 证书颁发机构文件的路径。
--experimental-upload-trace <traceUrl>将调试跟踪的子集报告到远程 HTTP URL。

next build 选项

next build 创建应用程序的优化生产构建。输出会显示每个路由的信息。例如:

Terminal
Route (app)
 /_not-found
 ƒ /products/[id]
 
  (Static)   prerendered as static content
ƒ  (Dynamic)  server-rendered on demand

next build 命令可使用以下选项:

选项描述
-h, --help显示所有可用选项。
[directory]构建应用程序的目录。如果未提供,将使用当前目录。
--turbopack强制启用 Turbopack(默认启用)。也可使用 --turbo
--webpack使用 Webpack 进行构建。
-d--debug启用更详细的构建输出。启用此标志后,将显示额外的构建输出,如重写、重定向和标头。
--profile启用 React 生产分析
--no-lint禁用代码检查。注意:在 Next 16 中,代码检查将从 next build 中移除。如果你使用的是 Next 15.5+ 且使用 eslint 以外的代码检查工具,构建期间将不会进行代码检查。
--no-mangling禁用名称修饰。这可能会影响性能,仅应用于调试目的。
--experimental-app-only仅构建 App Router 路由。
--experimental-build-mode [mode]使用实验性构建模式。(选项:"compile"、"generate",默认:"default")
--debug-prerender在开发中调试预渲染错误。
--debug-build-paths=<patterns>仅构建特定路由以进行调试。

next start 选项

next start 以生产模式启动应用程序。应用程序应先使用 next build 编译。

next start 命令可使用以下选项:

选项描述
-h--help显示所有可用选项。
[directory]启动应用程序的目录。如果未提供目录,将使用当前目录。
-p--port <port>指定启动应用程序的端口号。(默认:3000,环境变量:PORT)
-H--hostname <hostname>指定启动应用程序的主机名(默认:0.0.0.0)。
--keepAliveTimeout <keepAliveTimeout>指定关闭非活动连接之前等待的最大毫秒数。

next info 选项

next info 打印当前系统的相关详细信息,可用于在打开 GitHub issue 时报告 Next.js bug。此信息包括操作系统平台/架构/版本、二进制文件(Node.js、npm、Yarn、pnpm)、包版本(nextreactreact-dom)等。

输出应如下所示:

Terminal
Operating System:
  Platform: darwin
  Arch: arm64
  Version: Darwin Kernel Version 23.6.0
  Available memory (MB): 65536
  Available CPU cores: 10
Binaries:
  Node: 20.12.0
  npm: 10.5.0
  Yarn: 1.22.19
  pnpm: 9.6.0
Relevant Packages:
  next: 15.0.0-canary.115 // Latest available version is detected (15.0.0-canary.115).
  eslint-config-next: 14.2.5
  react: 19.0.0-rc
  react-dom: 19.0.0
  typescript: 5.5.4
Next.js Config:
  output: N/A

next info 命令可使用以下选项:

选项描述
-h--help显示所有可用选项
--verbose收集额外的调试信息。

next telemetry 选项

Next.js 收集关于常规使用情况的完全匿名遥测数据。参与此匿名计划是可选的,如果你不希望共享信息,可以选择退出。

next telemetry 命令可使用以下选项:

选项描述
-h, --help显示所有可用选项。
--enable启用 Next.js 的遥测数据收集。
--disable禁用 Next.js 的遥测数据收集。

了解更多关于遥测的信息。

next typegen 选项

next typegen 为应用程序的路由生成 TypeScript 定义,无需执行完整构建。这对于 IDE 自动完成和 CI 类型检查路由使用很有用。

以前,路由类型仅在 next devnext build 期间生成,这意味着直接运行 tsc --noEmit 不会验证你的路由类型。现在你可以独立生成类型并在外部验证它们:

Terminal
# 先生成路由类型,然后使用 TypeScript 验证
next typegen && tsc --noEmit
 
# 或在 CI 工作流中进行类型检查而不构建
next typegen && npm run type-check

next typegen 命令可使用以下选项:

选项描述
-h, --help显示所有可用选项。
[directory]生成类型的目录。如果未提供,将使用当前目录。

输出文件写入 <distDir>/types(通常:.next/dev/types.next/types,请参阅 isolatedDevBuild):

Terminal
next typegen
# or for a specific app
next typegen ./apps/web

此外,next typegen 生成一个 next-env.d.ts 文件。我们建议将 next-env.d.ts 添加到你的 .gitignore 文件中。

next-env.d.ts 文件包含在你的 tsconfig.json 文件中,以使 Next.js 类型对项目可用。

要确保在类型检查之前存在 next-env.d.ts,请运行 next typegennext devnext build 命令也会生成 next-env.d.ts 文件,但通常不希望仅为了类型检查而运行这些命令,例如在 CI/CD 环境中。

Terminal
next typegen
# 或针对特定应用
next typegen ./apps/web

值得注意的是next typegen 使用生产构建阶段加载你的 Next.js 配置(next.config.jsnext.config.mjsnext.config.ts)。确保所需的环境变量和依赖项可用,以便配置能够正确加载。

示例

调试预渲染错误

如果你在 next build 期间遇到预渲染错误,可以传递 --debug-prerender 标志以获得更详细的输出:

Terminal
next build --debug-prerender

这会启用几个实验性选项以便更容易调试:

  • 禁用服务器代码压缩:
    • experimental.serverMinification = false
    • experimental.turbopackMinify = false
  • 为服务器包生成 source maps:
    • experimental.serverSourceMaps = true
  • 在用于预渲染的子进程中启用 source map 消费:
    • enablePrerenderSourceMaps = true
  • 即使在第一个预渲染错误后也继续构建,这样你可以一次看到所有问题:
    • experimental.prerenderEarlyExit = false

这有助于在构建输出中显示更易读的堆栈跟踪和代码框架。

警告--debug-prerender 仅用于开发中的调试。不要将使用 --debug-prerender 生成的构建部署到生产环境,因为它可能会影响性能。

构建特定路由

你可以使用 --debug-build-paths 选项仅构建 App 和 Pages Router 中的特定路由。这对于在大型应用程序中工作时更快地调试很有用。--debug-build-paths 选项接受逗号分隔的文件路径,并支持 glob 模式:

Terminal
# 构建特定路由
next build --debug-build-paths="app/page.tsx"
 
# 构建多个路由
next build --debug-build-paths="app/page.tsx,pages/index.tsx"
 
# 使用 glob 模式
next build --debug-build-paths="app/**/page.tsx"
next build --debug-build-paths="pages/*.tsx"

更改默认端口

默认情况下,Next.js 在开发期间和使用 next start 时使用 http://localhost:3000。可以使用 -p 选项更改默认端口,如下所示:

Terminal
next dev -p 4000

或使用 PORT 环境变量:

Terminal
PORT=4000 next dev

值得注意的是PORT 不能在 .env 中设置,因为启动 HTTP 服务器发生在任何其他代码初始化之前。

在开发期间使用 HTTPS

对于某些用例,如 webhooks 或身份验证,你可以使用 HTTPSlocalhost 上拥有一个安全环境。Next.js 可以使用 --experimental-https 标志通过 next dev 生成自签名证书:

Terminal
next dev --experimental-https

使用生成的证书,Next.js 开发服务器将位于 https://localhost:3000。除非使用 -p--portPORT 指定端口,否则使用默认端口 3000

你还可以使用 --experimental-https-key--experimental-https-cert 提供自定义证书和密钥。可选地,你也可以使用 --experimental-https-ca 提供自定义 CA 证书。

Terminal
next dev --experimental-https --experimental-https-key ./certificates/localhost-key.pem --experimental-https-cert ./certificates/localhost.pem

next dev --experimental-https 仅用于开发,并使用 mkcert 创建本地受信任的证书。在生产环境中,请使用来自受信任机构的正式颁发证书。

为下游代理配置超时

在下游代理(例如负载均衡器如 AWS ELB/ALB)后面部署 Next.js 时,重要的是配置 Next 底层 HTTP 服务器的 keep-alive 超时,使其_大于_下游代理的超时时间。否则,一旦给定 TCP 连接的 keep-alive 超时到达,Node.js 将立即终止该连接而不通知下游代理。这会导致代理在尝试重用 Node.js 已终止的连接时出现代理错误。

要为生产 Next.js 服务器配置超时值,请将 --keepAliveTimeout(以毫秒为单位)传递给 next start,如下所示:

Terminal
next start --keepAliveTimeout 70000

传递 Node.js 参数

你可以将任何 node 参数传递给 next 命令。例如:

Terminal
NODE_OPTIONS='--throw-deprecation' next
NODE_OPTIONS='-r esm' next
NODE_OPTIONS='--inspect' next
版本变更
v16.0.0JS 包大小指标已从 next build 中移除
v15.5.0引入 next typegen 命令
v15.4.0next build 添加 --debug-prerender 选项以帮助调试预渲染错误。