Heroku部署Next.js应用因Node版本问题推送被拒如何解决
问题根因
- Heroku 构建缓存残留了旧的
engines.node配置(带v前缀的版本号不符合Heroku的semver解析规则),导致解析失败后自动安装了Node 17版本 - Node 17默认使用OpenSSL 3.0,和你项目中使用的Next 11内置的Webpack 5版本不兼容,触发
ERR_OSSL_EVP_UNSUPPORTED报错 - 末尾的
main -> main (pre-receive hook declined)是前面构建失败触发的拦截规则,和分支命名无关,构建成功后该报错会自动消失
解决方案
按顺序执行以下操作即可:
- 清除Heroku构建缓存,避免旧配置残留
heroku builds:cache:purge -a 替换为你的Heroku应用名称
执行后根据提示输入y确认清除即可。
2. 修正package.json中的engines配置,明确指定Node和npm版本,不要加v前缀
{ // 保留其他配置不变,只修改engines字段 "engines": { "node": "16.13.0", "npm": ">=8.1.0" } }
- (兜底可选)如果仍有兼容性报错,修改build脚本增加OpenSSL兼容参数
{ // 保留其他配置不变,只修改scripts下的build字段 "scripts": { "dev": "next dev", "build": "NODE_OPTIONS=--openssl-legacy-provider next build", "start": "next start -p $PORT" } }
- 提交所有改动后重新推送到Heroku
git add . git commit -m "fix: 修正Heroku部署配置" git push heroku main
内容的提问来源于stack exchange,提问作者Wittner
相关产品推荐
相关产品推荐

