将React应用从Heroku stack-18升级到stack-22时部署失败求助
解决Heroku Stack-22升级后的React部署错误
错误原因分析
从日志能明确两个核心问题:
- node-sass版本不兼容:你使用的
node-sass:4.x不支持Node.js 18,而Heroku-22默认安装Node 18.x版本 - Python版本冲突:Heroku-22预装Python 3,但旧版
node-gyp@3.8.0依赖Python 2的语法(比如无括号的print语句),导致编译失败
修复步骤
1. 替换或升级node-sass(优先推荐替换)
node-sass已停止维护,建议换成官方推荐的dart-sass:
- 卸载node-sass:
npm uninstall node-sass - 安装dart-sass:
npm install sass --save
如果坚持使用node-sass,需升级到支持Node 18的最低版本node-sass@7.0.0,但仍不推荐,因为该项目已废弃。
2. 在package.json中指定兼容的Node.js版本
避免Heroku自动选择不兼容的Node版本,在package.json中添加engines字段:
{ // ... 其他已有配置 "engines": { "node": "16.x", "npm": "8.x" } }
Node 16与你的React 17、react-scripts 4.x兼容性更好,也能避开Python语法冲突问题。
3. 可选:升级react-scripts到兼容版本
你的react-scripts:4.0.0版本较旧,升级到5.x可更好支持新Node版本和现代依赖:
npm install react-scripts@latest --save
验证修复
完成修改后先本地测试构建:
npm run build
确认构建成功后,再推送到Heroku:
git add . git commit -m "fix: resolve Heroku stack-22 deployment errors" git push heroku main
内容的提问来源于stack exchange,提问作者Mohit Kumar
相关产品推荐
相关产品推荐

