MEAN Stack应用部署Heroku后出现'Uncaught SyntaxError: Unexpected token <'错误求助
解决MEAN Stack部署Heroku后出现'Uncaught SyntaxError: Unexpected token <'的问题
我帮你梳理了这个问题的常见原因和修复步骤,这个错误在SPA(单页应用)部署时特别常见,核心原因是浏览器请求的前端静态资源(JS/CSS)返回了HTML内容(比如404页面或者index.html),导致解析JS时遇到了HTML的<符号,触发语法错误。结合你的场景,按以下步骤排查:
1. 检查Express服务器的静态资源托管与路由Fallback
首先看你的服务器入口文件(比如server.js),必须确保:
- 先托管Angular构建后的
dist文件夹 - API路由要放在静态资源托管和Fallback路由之前
- 所有非API请求都返回
index.html(SPA的核心需求)
正确的配置示例:
const path = require('path'); const express = require('express'); const app = express(); // 1. 托管Angular静态资源,注意路径要匹配你的dist文件夹结构 app.use(express.static(path.join(__dirname, 'dist/ai-product-review-v1'))); // 2. 定义你的API路由(放在静态资源之后,Fallback之前) app.use('/api', require('./routes/your-api-routes')); // 3. SPA Fallback:所有其他请求返回index.html app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'dist/ai-product-review-v1/index.html')); }); // 启动服务器 const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
重点确认:dist文件夹的路径是否正确——Angular生产构建后,通常会在dist目录下生成一个和项目同名的子文件夹,别漏了这个子路径!
2. 确认Angular的构建配置(base href)
Angular应用部署时必须设置正确的base href,否则静态资源的相对路径会出错。
- 在
package.json的scripts里,确保构建命令包含--base-href /:"scripts": { "build": "ng build --prod --base-href /", "heroku-postbuild": "npm install && npm run build" } - 或者在
angular.json的projects -> your-project -> architect -> build -> options里添加"baseHref": "/"。
这个配置确保浏览器请求静态资源时用根路径,不会出现嵌套路径导致的404。
3. 检查Heroku的构建日志
登录Heroku控制台,查看你的应用的构建日志,确认:
- Node依赖是否安装成功
- Angular的
npm run build是否执行完成,有没有报错 dist文件夹是否正确生成
如果构建过程中出现错误(比如Angular CLI版本不兼容、依赖缺失),会导致静态资源缺失,进而触发资源请求返回HTML的问题。
4. 用浏览器开发者工具验证资源请求
打开线上应用的开发者工具(F12),切换到Network标签页,刷新页面:
- 查看所有JS、CSS资源的请求状态,如果某个资源显示404,点击它查看响应内容——如果响应是HTML(比如你的index.html),就说明这个资源的路径配置错误,回到前面的步骤修正。
按照这些步骤排查,应该能快速定位并解决问题。
内容的提问来源于stack exchange,提问作者Saurabh Borse
相关产品推荐
相关产品推荐

