import type { NextConfig } from "next"; import { withSerwist } from "@serwist/turbopack"; /** * Next.js 16 临时绕过 `/_global-error` prerender 的 workStore bug * 标记根 layout 不参与静态预渲染(global-error 会在请求时渲染) * https://nextjs.org/docs/app/api-reference/file-conventions/route-segment-config * * 默认部署模型:`.next/` + `public/` + `next start`(或 Vercel 零配置) * - `pnpm build` 产出 .next/(含 build manifest / chunks / 路由表 / 静态预渲染) * - 脚本侧:scripts/deploy/_deploy_lib.sh 同步 .next/ + public/ * - 服务器启动:`cd && next start -H 0.0.0.0 -p 3000` * 或用 PM2:`pm2 start "next start" --name cozsweet` * * PWA 集成:`@serwist/turbopack` 在 build 阶段用 esbuild 编译 `src/app/sw.ts` 源文件。 * - Turbopack 原生支持 —— 不再需要 `--webpack` flag * - SW 通过 Serwist Route Handler(src/app/serwist/[[...slug]]/route.ts)在 `/serwist/sw.js` 服务 * - 客户端注册走 ``(替代旧的 ) * * 历史: * - 之前用 @ducanh2912/next-pwa(webpack-only),被迫用 `--webpack` 退 Turbopack * - 切到 @serwist/turbopack 后拿回 Turbopack 的 dev/build 性能 */ const nextConfig: NextConfig = { experimental: { // 关闭静态优化以规避 16.2.7 global-error prerender bug staticGenerationRetryCount: 0, }, images: { // Facebook OAuth 登录后,`picture.type(large)` 返回 // platform-lookaside.fbsbx.com/platform/profilepic/?asid=...&hash=... // 该 URL 是**下载链接**而非可缓存图片,next/image 优化器需要显式 allowlist。 // graph.facebook.com 兜底:Graph 偶尔返回直链头像 / OG 图。 remotePatterns: [ { protocol: "https", hostname: "platform-lookaside.fbsbx.com", }, { protocol: "https", hostname: "graph.facebook.com", }, ], }, }; export default withSerwist(nextConfig);