You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Heroku应用部署后异常:空白页及Unexpected token <错误求助

解决Heroku部署后空白页+Unexpected token <错误

这个问题我在帮别人排查部署问题时碰到过好多次,Uncaught SyntaxError: Unexpected token < 是前端加载资源时的典型报错——本质是你的JS文件(比如这里的main.ac26b187.js)实际返回的不是预期的JS代码,而是HTML内容(通常是404页面或者首页的HTML),浏览器一碰到HTML开头的<自然就解析失败了。结合Heroku部署的场景,大概率是静态资源路径或服务器配置出了问题,下面给你一步步的排查和解决方法:

1. 检查SPA框架的静态资源路径配置

如果你用的是React、Vue这类单页应用框架,首先要确认基础路径配置是否正确:

  • React项目:在package.json里添加"homepage": "."(或者如果是自定义域名,就填写对应路径)。这个配置会告诉build工具生成的静态资源使用相对路径,避免在Heroku上因为绝对路径找不到资源。
  • Vue项目:在vue.config.js里设置:
    module.exports = {
      publicPath: process.env.NODE_ENV === 'production' ? './' : '/'
    }
    
    确保生产环境下静态资源用相对路径加载。

2. 确认Heroku的Build命令正确

检查你的package.json里的scripts字段,确保有正确的build命令:

  • React:"build": "react-scripts build"
  • Vue:"build": "vue-cli-service build"
    Heroku会自动检测并执行npm run build(只要你用的是官方脚手架生成的项目),但要确认build之后生成的build(React)或dist(Vue)文件夹是正确生成的,Heroku能识别这个文件夹作为静态资源目录。

3. 查看完整的Heroku运行日志

你提供的日志只有部署记录,没有关键的请求日志。打开终端执行:

heroku logs --tail

然后刷新你的应用页面,观察日志里关于main.ac26b187.js的请求记录:

  • 如果返回404状态码:说明资源路径配置错误,找不到这个JS文件;
  • 如果返回200状态码但内容是HTML:说明服务器把所有请求都重定向到了index.html(SPA路由的常见配置),但静态资源请求应该直接返回对应文件,这时候是服务器路由顺序错了。

4. 修正自定义服务器的路由配置

如果你用Express这类自定义服务器托管SPA,一定要确保静态资源托管的代码放在SPA fallback路由之前:

const express = require('express');
const path = require('path');
const app = express();

// 先托管静态资源,优先级高于SPA路由
app.use(express.static(path.join(__dirname, 'build')));

// 再处理SPA的路由 fallback,所有非API请求返回index.html
app.get('/*', function (req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

如果把fallback路由放在前面,所有请求(包括JS/CSS)都会返回index.html,就会触发你遇到的语法错误。

5. 本地验证Build后的效果

先在本地执行npm run build,然后用serve工具启动静态服务器测试:

# 安装serve(如果没装过)
npm install -g serve
# 启动服务器,指定build/dist文件夹
serve -s build  # React项目
# 或者
serve -s dist  # Vue项目

如果本地访问也出现同样的空白页和报错,那问题出在代码配置上,和Heroku无关,先在本地解决再重新部署。

按照上面的步骤排查,应该能解决这个问题。如果还是卡壳,可以把完整的Heroku运行日志、你的package.json和框架配置文件贴出来,我再帮你细化分析。

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

火山引擎 最新活动