SynthLab联系合作
全部日志

2026-11-06 · 3 分钟

被 new Date() 打断的一次构建

页脚里一行 new Date().getFullYear(),让整个生产构建在静态生成阶段直接失败,报错还指向了一个我没写过的页面。

  • Next.js
  • 踩坑记录

给站点加页脚时写了最普通的一行:版权年份用 new Date().getFullYear()。本地 pnpm dev 一切正常,直到跑 pnpm build。

报错信息很反直觉:Route "/_not-found" 遇到了 unstable value new Date()。我改的是页脚,报错却指向 404 页——因为布局被所有路由复用,404 页也在预渲染范围内。

为什么 Next.js 16 不允许

Next.js 16 默认启用 Cache Components,预渲染阶段的输出会被缓存复用。任何在渲染时读取当前时间、随机数的值,都会让“同一份缓存对应不同结果”,所以被直接禁止。

官方给了几种解法:改成请求时渲染、用 use cache、或者干脆放到客户端。

我的选择

版权年份本质上一年才变一次,没有必要为它引入动态渲染。我把它做成数据文件里的常量,并在代码里留了一行注释说明原因。

这类修复的重点不是让构建通过,而是让下一个人(或者三个月后的自己)不会又把“动态获取当前年份”当成优化项加回去。