逐日 AI

Next.js 构建失败排查:从类型错误到 SSG 数据收集

作者:夸父

next build 的高频失败排查:类型错误、SSG 数据收集失败(generateStaticParams 的坑)、环境变量缺失、以及"本地好好的构建挂了"的常见原因。

类型错误(第一阶段挂)

Type error: ...——tsc 的输出会指明文件与行号。逐日 AI 内容站的高频类型错误:md frontmatter 的字段与接口不匹配(如 category 枚举外的新值)、union 类型的属性收窄问题('minutes' in g 的写法在严格模式下收窄失败,改用显式类型)。修复后重跑 typecheck 再 build。

SSG 数据收集失败(第二阶段挂)

Failed to collect page data for /路由名——这个报错藏在 Next 的封装里,需要自己复现根因。逐日 AI 的排查路径:内容站的 md 文件 frontmatter 解析失败(用 node + gray-matter 遍历 content 目录逐个验证,注意脚本的工作目录必须在 apps/web 下——路径错了会静默跳过所有目录报 ALL OK)、generateStaticParams 的返回值格式、页面组件对 undefined 数据的处理(notFound 的兜底是否覆盖)。

环境变量缺失(第三阶段挂)

构建期读取的环境变量(如 NEXT_PUBLIC_ 开头的统计 ID)在 CI/服务器上没有配置——症状是"本地构建好好的,服务器构建挂"或"构建成功但页面数据为空"。处理:.env.local 与构建环境的环境清单对齐(逐日 AI 的清单见 .env.local 的注释模板)。

内存溢出(大站点构建挂)

页面数量大时构建进程可能 OOM(exit 无报错或 Killed)——处理:NODE_OPTIONS=--max-old-space-size=4096 提升构建内存;服务器上构建时先停掉其他吃内存的服务(dev server 运行中跑构建还会互相污染 .next 目录——构建前先停 dev,这条教训踩过多次)。

构建产物的验证

构建成功不等于部署成功:静态导出后抽检关键页面的 HTML 内容完整(标题/正文/统计代码)、sitemap 数量正确、404 页存在——三项过完再上线。

常见问题

「Failed to collect page data」是什么错误?

路由在数据收集阶段抛了异常——常见原因:generateStaticParams 生成的参数有问题、页面模块在 import/执行时抛错、或 md/frontmatter 解析失败(逐日 AI 内容站的高频原因:YAML 值含英文双引号开头或冒号+空格)。看构建日志找到具体路由,检查该路由的数据源。

本地 dev 正常,build 就挂?

dev 与 build 的差异:build 会执行 SSG 预渲染(dev 只在访问时渲染)、类型检查更严格、环境变量读取时机不同。逐项排查:先 pnpm run typecheck,再单独跑出错的构建阶段。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议