You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MERN stack项目部署到Heroku后返回空白页,日志无报错如何解决?

问题原因
  • 最核心的原因是路径大小写不匹配:Heroku 运行在大小写敏感的 Linux 系统上,你代码中对前端目录的引用大小写不一致:
    • 静态资源加载中间件写的是 app.use(express.static('client/build')),使用小写开头的 client
    • 发送 HTML 文件的路径写的是 path.resolve(__dirname, './Client', 'build', 'index.html'),使用大写开头的 Client
      结合你 package.json 中 heroku-postbuild 脚本是进入 Client 目录执行构建,说明你的前端文件夹实际名为大写的 Client,所以静态资源中间件找不到小写 client 目录下的 JS、CSS 等资源,导致 HTML 可以正常返回,但没有资源渲染页面,最终出现空白。
  • 次要可能原因:你将静态资源中间件放在了生产环境判断之外,且未使用绝对路径匹配,生产环境下资源加载优先级错误,也会导致静态资源加载失败。
解决方法
  1. 统一所有前端目录的路径写法,和实际文件夹名保持一致,建议将静态资源中间件也移入生产环境判断内,使用绝对路径保证兼容性,修改后的服务端代码段如下:
if (process.env.NODE_ENV === 'production') {
    console.log("inside production00");
    const path = require('path');
    // 统一使用大写Client的绝对路径加载静态资源
    app.use(express.static(path.resolve(__dirname, 'Client', 'build')));
    app.get('*', (req, res) => {
        console.log("inside send file", __dirname);
        res.sendFile(path.resolve(__dirname, 'Client', 'build', 'index.html'))
    });
}
  1. 检查前端项目(Client目录下)的package.json配置,删除错误的homepage字段,或者将其修改为你的Heroku应用域名,避免打包后的静态资源引用路径错误。
  2. 本地先执行npm run heroku-postbuild验证构建流程正常,确认Client目录下会生成包含静态资源的build文件夹后再重新部署到Heroku。
  3. 部署后如果仍然空白,可以打开浏览器控制台查看报错,如果存在JS/CSS资源404的报错,再进一步核对路径配置即可。

内容的提问来源于stack exchange,提问作者NEWGIN SAM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:39:03