You need to enable JavaScript to run this app. React与Node.js全栈应用部署至Heroku后空白页及资源报错求助
优惠活动
大模型
产品
解决方案
定价
更多

React与Node.js全栈应用部署至Heroku后空白页及资源报错求助

部署空白页问题排查与修复

控制台报出的Unexpected token '<'、manifest.json语法错误,本质是服务端无法正确定位静态资源目录,所有对js、json等静态文件的请求都被前端路由兜底逻辑拦截,返回了开头为<的index.html内容,浏览器尝试将HTML内容作为JS、JSON解析时就会触发对应语法错误。

1. 修正静态资源路径的拼接方式

当前静态资源托管的代码存在跨平台兼容bug:

// 错误写法:__dirname 与相对路径之间缺少路径分隔符,手拼字符串的方式在Linux环境下(Heroku运行环境)会生成非法路径
app.use(express.static(__dirname + '../client/build'));

上述代码拼接完成的路径会类似/app/server../client/build,属于不存在的非法路径,完全匹配不到真实的build静态资源目录。本地开发时Windows的路径解析容错性可能掩盖了这个错误,但Heroku的Linux环境会严格按照路径字符串做匹配,直接触发静态资源404。
修正为使用内置path模块做跨平台的可靠路径拼接:

// 先在服务端文件头部引入path模块
const path = require('path');
// 替换原来的静态资源托管代码
app.use(express.static(path.join(__dirname, '../client/build')));

2. 确保构建产物被推送到Heroku仓库

Create React App默认会在client目录的.gitignore配置中,将build目录加入忽略列表,本地构建生成的静态文件不会被纳入Git提交。如果推送到Heroku的代码里根本不存在client/build目录,服务端自然无法正常返回静态资源。
对应修正步骤:

  • 检查client目录下的.gitignore文件,临时移除/build的忽略规则
  • 执行强制提交命令,将构建产物加入Git追踪:git add -f client/build
  • 重新推送代码到Heroku完成部署

3. 校验前端路由兜底逻辑

修正完静态资源路径后,确认兜底路由的写法不会错误拦截静态资源请求:

app.get('*', (req, res) => {
  // 同样使用path.join做路径拼接,避免硬编码路径错误
  res.sendFile(path.join(__dirname, '../client/build/index.html'));
});

内容的提问来源于stack exchange,提问作者Sarah Mohammēđ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 22:36:03