拓扑森林
首页OPC课程政企培训专属智能体项目投融资行业资讯站内论坛关于我们
登录
跳到主内容
    论坛/求助问答

    Vercel 部署后 CSS 样式丢失

    蜕皮的蛇·2025/11/14 08:14:21·0 浏览
    站内论坛
    教程论坛排行榜徽章
    蜕皮
    蜕皮的蛇楼主
    2025/11/14 08:14:21
    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 楼2025/11/14 22:38:21
      我做了类似的对比实验:useSession() 返回 null 检查 SessionProvider 是否包裹了组件。后续有新发现再来更新。
    2. 内卷
      内卷幸存者第 3 楼2025/11/14 22:38:21
      我的结论恰恰相反:next/dynamic + ssr:false 不能在 Server Component 用,要包一层 'use client'。踩了很多坑才总结出来的。
    3. 老张
      老张第 4 楼2025/11/17 19:01:26
      我调研过这块,hydration mismatch 一般是服务端客户端渲染不一致,加 suppressHydrationWarning 试试。欢迎私信深入交流。
    4. 打工
      打工人之光第 5 楼2025/11/25 13:35:39
      实操中我发现:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。效果因项目而异,建议实际测试。
    5. 快乐
      快乐的水豚第 6 楼2025/11/27 06:02:21
      Server Action 提交后不跳转,用 window.location.href 替代 router.push。
    6. 键盘
      键盘敲击者第 7 楼2025/11/28 21:29:30
      useSession() 返回 null 检查 SessionProvider 是否包裹了组件。
    7. BU
      Bug猎人第 8 楼2025/11/30 17:27:28
      反对一下,我的测试结果不是这样:revalidatePath 路径要含 locale 前缀,如 /zh/forum/thread/xxx。希望少走弯路。
    8. 掘洞
      掘洞的兔第 9 楼2025/12/08 02:48:25
      我调研过这块,Vercel 环境变量改了要重新部署才生效,NEXT_PUBLIC_ 变量尤其如此。细节可以再展开讨论。
    9. 阿杰
      阿杰第 10 楼2025/12/10 09:21:17
      有个相关问题想请教:cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。
    10. 观星
      观星者第 11 楼2025/12/12 18:52:53
      useSession() 返回 null 检查 SessionProvider 是否包裹了组件。
    11. 精神
      精神小伙第 12 楼2025/12/16 01:50:24
      我做了类似的对比实验:hydration mismatch 一般是服务端客户端渲染不一致,加 suppressHydrationWarning 试试。欢迎私信深入交流。
    12. 迷路
      迷路的信鸽第 13 楼2025/12/20 12:10:18
      我之前也遇到过类似问题,Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。希望少走弯路。
    13. 春暖
      春暖花开第 14 楼2025/12/22 12:48:56
      上周刚好踩了这个坑,hydration mismatch 一般是服务端客户端渲染不一致,加 suppressHydrationWarning 试试。有疑问可以继续问。
    14. 路过
      路过的甲第 15 楼2025/12/23 10:36:28
      说说我自己的经历:Server Action 提交后不跳转,用 window.location.href 替代 router.push。后续有新发现再来更新。
    15. 摸鱼
      摸鱼的锦鲤第 16 楼2025/12/24 08:13:49
      next/dynamic + ssr:false 不能在 Server Component 用,要包一层 'use client'。
    16. 离线
      离线爱好者第 17 楼2025/12/24 18:51:00
      补充一点:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。
    17. 小白
      小白第 18 楼2025/12/27 00:34:07
      反对一下,我的测试结果不是这样:middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。如有不对请指正。
    18. 后端
      后端搬砖工第 19 楼2025/12/28 01:02:18
      middleware 里 pathname 含 locale 前缀,用 includes() 不要用精确匹配。
    19. 接口
      接口焊接工第 20 楼2025/12/31 17:03:48
      分享一下我的做法:Prisma 连接池在 Serverless 环境设 connection_limit=1,加 ?pgbouncer=true。有疑问可以继续问。
    20. 00
      007志愿者第 21 楼2026/01/08 21:12:00
      我调研过这块,cookies().set() + redirect() 在 Server Component 不兼容,改用 Server Action。希望对你有帮助。
    登录后可回复
    蜕皮

    蜕皮的蛇

    楼主个人主页

    帖子信息

    29 回复
    0 浏览
    5 赞
    0 收藏
    回复