本地构建正常但Heroku部署Node.js项目构建失败
问题根因
本次Heroku构建失败的直接原因是npm ci安装依赖时校验失败:package.json与package-lock.json记录的依赖版本不同步,具体冲突点为fs-capacitor——你在依赖配置和版本强制规则里指定了fs-capacitor@6.2.0,但锁文件中记录的间接依赖要求安装fs-capacitor@2.0.4,版本校验不通过直接终止了构建流程。
5天前同代码能部署成功,是因为当时构建命中了Heroku端存储的旧依赖缓存,跳过了严格的全量锁文件校验;本次构建时Heroku自动将Node版本升级到了16.15.1,和之前缓存对应的Node版本不一致,缓存被强制清空,走了全新的干净安装流程,才把锁文件不一致的问题暴露出来。
注意:你在preinstall脚本里配置的npx npm-force-resolutions是适配yarn resolutions字段的第三方工具,在Heroku的npm ci构建流程中不会正常生效:npm ci不会动态修改锁文件,preinstall阶段做的版本修改无法通过前置的锁文件一致性校验。
修复步骤
按顺序操作即可解决问题:
- 删除本地项目根目录下的
node_modules文件夹和旧的package-lock.json文件 - 打开
package.json,删除"preinstall": "npx npm-force-resolutions"这行脚本配置——npm 8.x及以上版本已经原生支持依赖版本强制,不需要第三方工具实现 - 将
package.json中的resolutions字段替换为npm原生的overrides字段,原有版本规则保持不变:
"overrides": { "fs-capacitor": "6.2.0", "graphql-upload": "^11.0.0" }
- 在本地项目根目录执行
npm install,生成和当前package.json完全同步的全新package-lock.json文件 - 本地执行
npm run build确认构建流程正常、服务可正常启动后,将所有变更(修改后的package.json、新生成的package-lock.json)提交到Git仓库 - 重新执行
git push heroku master即可正常完成部署 - 如果仍遇到缓存类异常,可以先清空Heroku端的构建缓存,再重新推送代码
内容的提问来源于stack exchange,提问作者Jungwoo
相关产品推荐
相关产品推荐

