部署
Next.js 静态网站
把 Next.js app 导出成静态 HTML 和资源文件,上传 out 目录,不需要执行 Node.js 服务器也能全球发布。
Static export 支持矩阵
上传 out 前,先确认 app 符合静态导出模型。
适合
- 构建时生成的静态路由
- 可静态渲染的 App Router 页面
- Pages Router getStaticProps / getStaticPaths
- Hydration 后的 client-side data fetching
- next/link、dynamic imports、CSS Modules 和静态资源
需要其他 runtime
- 需要服务器执行的 API routes 和 route handlers
- Middleware、rewrites、redirects 和自定义 headers
- getServerSideProps 与 request-time rendering
- Incremental Static Regeneration
- 没有自定义静态策略的默认 next/image optimization
需要框架能力,但不需要服务器时使用 Next.js
保留框架,拿掉服务器
Next.js static export 让你保留文件式路由、layout、metadata、build-time rendering、CSS 支持,以及需要时的 client-side React。
输出结果仍然只是文件。这很适合营销页、文档站、作品集、产品页、内容中心,以及能在构建时准备好的页面。
像静态资源一样快
预先生成的 HTML 可以积极缓存,并直接从边缘节点提供,不必等待服务器即时 render。
运维负担更少
没有 Node runtime,代表生产环境需要维护的环节更少,部署产物也更清楚。
执行边界清楚
需要服务器代码的页面不该硬做成 static export。能提前构建的页面,out 目录就是干净的发布产物。
常见 static export 阻碍
因 server-only 功能导致构建失败
从导出路由移除 request-time API,把逻辑移到独立后端,或把该部分部署到支持服务器功能的平台。
图片在开发环境正常,导出后失效
默认 next/image optimizer 需要服务器。请使用 images.unoptimized、自定义 loader,或一般静态图片资源。
动态路由缺页
在 App Router 用 generateStaticParams,或在 Pages Router 用 getStaticPaths,在构建时生成路由清单。
Redirects 或 rewrites 没有套用
Next.js redirects 和 rewrites 不属于 static export。请使用静态页结构、client-side navigation,或可用的平台层 redirect。
Next.js 静态导出检查表
设置 output: 'export'
让 Next.js 在构建时输出静态 HTML,而不是期待 next start 或 Node runtime。
output: 'export'构建并检查 /out
执行正式 build,确认 out 目录包含要发布的页面、资源、404 页和静态文件。
npm run build上传并测试路由
上传 out 目录后,检查深层路径、静态资源和未优化图片是否在上线网站正常。
Next.js 部署常见问题
为什么 Next.js Image 组件导出后会坏掉?
默认 Image 优化流程需要服务器。静态导出时,请在 next.config.js 设置 images.unoptimized 为 true。
API routes 或 getServerSideProps 可以在这里用吗?
不行。Static export 会移除 API routes、middleware、getServerSideProps 等服务端 runtime 功能。请把这些逻辑移到独立后端或 serverless 服务。
可以使用 App Router 吗?
可以,只要该路由可静态渲染,且不依赖 headers、cookies 等 dynamic server-only API。
动态内容该怎么处理?
能在构建时取得就先构建;否则在页面 hydration 后由 client-side 加载。Static export 最适合 HTML 可提前准备的页面。
应该上传 .next 还是 out?
output: 'export' 要上传 out。.next 是 Next.js 的内部构建目录,不是你要发布的静态导出产物。
这能取代 Vercel 的 Next.js hosting 吗?
它适合静态导出,不适合每一种 Next.js app。如果你依赖 SSR、middleware、ISR、server actions 或 API routes,就需要支持这些功能的 runtime。