II.002 / 008
← 返回文章列表Next.js 静态导出部署到 GitHub Pages 实践指南.
阅读 2 分钟nextjs-s
核心约束
GitHub Pages 只提供静态文件服务。它无法运行 Node.js 服务器。这意味着:没有 SSR、没有 ISR、没有中间件、没有 Route Handler。
Next.js 通过 output: "export" 支持这种部署模式:
// next.config.ts
const nextConfig: NextConfig = {
output: "export",
images: {
unoptimized: true,
},
};失去的能力
- 需要服务器的 Server Component ——
cookies()、headers()、searchParams(params不受影响,构建时已知)。 - Route Handler —— 不支持
route.ts文件。API 逻辑需要迁到外部服务或 GitHub Actions。 next/image优化 —— 必须设置unoptimized: true。可以用sharp在构建脚本中预处理图片,或使用 CDN。- 动态路由 —— 每个
[slug]路由都必须提供generateStaticParams()。
保留的能力
- App Router 的 layouts、loading、error boundaries
generateStaticParams用于动态路由generateMetadata用于每页 SEO- Server Component(构建时渲染)
- Client Component(正常水合)
- Tailwind、PostCSS,所有 CSS 方案
MDX 支持
@next/mdx 包直接集成:
import createMDX from "@next/mdx";
const withMDX = createMDX({
extension: /\.mdx?$/,
});
export default withMDX({
pageExtensions: ["ts", "tsx", "mdx"],
output: "export",
images: { unoptimized: true },
});部署
一个 GitHub Actions 工作流完成构建并将输出推送到 gh-pages 分支:
- uses: peaceiris/actions-gh-pages@v4
with:
publish_dir: ./out
publish_branch: gh-pages就是这样。推送到 master 分支,站点自动更新。