部署在S3上的React应用出现Unexpected token <错误求助
解决Create React App + Serverless部署后因目录大小写修改导致的语法错误问题
你遇到的Uncaught SyntaxError: Unexpected token <错误,本质是浏览器尝试解析的不是JS文件,而是HTML内容(通常是404跳转回的index.html)。结合你修改了Icons/为icons/的操作,我帮你梳理几个核心原因和解决办法:
1. 构建产物的资源引用未更新
当你把目录名从大写Icons改成小写icons后,本地代码里的引用(比如import语句、img标签的src)可能还有残留的大写路径,导致CRA构建后的JS文件里依然指向旧的Icons路径。而S3里已经是小写的icons,请求旧路径会返回404;如果你的S3/Serverless配置了SPA的404重定向到index.html,浏览器就会把HTML当成JS来解析,自然出现<语法错误。
解决步骤:
- 全局搜索代码库,确认所有引用
Icons的地方都改成了icons(注意:Linux/S3是大小写敏感的,必须完全匹配) - 清空本地
build目录,重新执行npm run build - 打开
build/static/js目录下的文件,检查里面的资源路径是否都更新为小写的icons
2. 缺失的JS文件:缓存或部署遗漏
你提到报错里的main.977eb738.js在S3里找不到,大概率是这两种情况:
- 缓存问题:浏览器或CDN缓存了旧的HTML文件,里面引用的还是旧哈希的JS文件,但新部署的S3里已经是新哈希的文件了。
- 解决:强制刷新浏览器(Ctrl+Shift+R),如果用了CDN,手动清理CDN缓存
- 部署遗漏:Serverless部署脚本没有把新构建的JS文件上传到S3。
- 解决:检查Serverless配置文件(比如
serverless.yml)里的静态资源上传规则,确认build目录下的所有文件都被包含;手动对比本地build目录和S3存储桶里的文件,确保main.xxx.js等文件都上传成功
- 解决:检查Serverless配置文件(比如
3. S3的大小写敏感性验证
虽然你已经确认S3里是小写icons,但还是要额外注意:
- 部署时有没有上传旧的
Icons目录残留(S3会保留大小写不同的独立目录) - 确保代码里的所有资源路径和S3里的目录完全匹配(全小写,没有拼写错误)
内容的提问来源于stack exchange,提问作者kareem
相关产品推荐
相关产品推荐

