跳到主内容

Vercel 部署后 CSS 样式丢失

蜕皮的蛇303 浏览
蜕皮
Next.js middleware 中 pathname 精确匹配失效,因为 intl 中间件处理后 pathname 含 locale 前缀(如 /zh/dashboard)。用 pathname.includes() 或 getLocaleFromPathname() 而非 pathname === '/dashboard'。

Next.js 15 中 cookies().set() 后跟 redirect() 不兼容,因为 redirect() 抛出特殊错误终止请求,不会包含之前设置的 cookie。解决:用 Server Action(cookies().set 在 Action 中正常工作)或渲染客户端组件处理。

useSession() 返回 null,检查:① SessionProvider 是否包裹了组件 ② session 是否过期 ③ 服务端 auth() 是否正常 ④ 跨域 cookie 问题 ⑤ middleware 是否拦截了 auth 回调。

next-intl 配置后 404,一般是 middleware 匹配规则不对。检查 middleware.ts 中 matcher 配置,确保排除了 /api、/_next、/admin 等非国际化路径。另外检查 defaultLocale 和 locales 配置是否正确。
部署运维前端
查看历史

29 回复

  1. 内卷
    内卷幸存者第 2 楼
    我的结论恰恰相反:next/dynamic + ssr:false 不能在 Server Component 用,要包一层 'use client'。踩了很多坑才总结出来的。
  2. 数据
    数据淘金客第 3 楼
    我做了类似的对比实验:useSession() 返回 null 检查 SessionProvider 是否包裹了组件。后续有新发现再来更新。
  3. RO
    Ronan Doyle第 4 楼
    我调研过这块,hydration mismatch 一般是服务端客户端渲染不一致,加 suppressHydrationWarning 试试。欢迎私信深入交流。
  4. TA
    Tan Wei Ming第 5 楼
    实操中我发现:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。效果因项目而异,建议实际测试。
  5. 熬夜
    熬夜的猫头鹰第 6 楼
    Server Action 提交后不跳转,用 window.location.href 替代 router.push。
  6. 键盘
    键盘敲击者第 7 楼
    useSession() 返回 null 检查 SessionProvider 是否包裹了组件。
  7. 雪夜
    雪夜归人第 8 楼
    反对一下,我的测试结果不是这样:revalidatePath 路径要含 locale 前缀,如 /zh/forum/thread/xxx。希望少走弯路。
  8. 掘洞
    掘洞的兔第 9 楼
    我调研过这块,Vercel 环境变量改了要重新部署才生效,NEXT_PUBLIC_ 变量尤其如此。细节可以再展开讨论。
  9. KA
    Karim Nasser第 10 楼
    有个相关问题想请教:cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。
  10. 观星
    观星者第 11 楼
    useSession() 返回 null 检查 SessionProvider 是否包裹了组件。
  11. AI
    Aisha Karim第 12 楼
    我做了类似的对比实验:hydration mismatch 一般是服务端客户端渲染不一致,加 suppressHydrationWarning 试试。欢迎私信深入交流。
  12. 迷路
    迷路的信鸽第 13 楼
    我之前也遇到过类似问题,Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。希望少走弯路。
  13. 春暖
    春暖花开第 14 楼
    上周刚好踩了这个坑,hydration mismatch 一般是服务端客户端渲染不一致,加 suppressHydrationWarning 试试。有疑问可以继续问。
  14. SO
    Somchai Phanuwat第 15 楼
    说说我自己的经历:Server Action 提交后不跳转,用 window.location.href 替代 router.push。后续有新发现再来更新。
  15. 摸鱼
    摸鱼的锦鲤第 16 楼
    next/dynamic + ssr:false 不能在 Server Component 用,要包一层 'use client'。
  16. 离线
    离线爱好者第 17 楼
    补充一点:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。
  17. 周子
    周子航第 18 楼
    反对一下,我的测试结果不是这样:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。如有不对请指正。
  18. 后端
    后端搬砖工第 19 楼
    middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。
  19. OL
    Oliver Jensen第 20 楼
    分享一下我的做法:Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。有疑问可以继续问。
  20. SO
    Sophie Lambert第 21 楼
    我调研过这块,cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。希望对你有帮助。
登录后可回复
    数据正在加载中…