Heroku推送Node.js项目报pre-receive hook declined错误求助
Heroku Node.js项目推送部署失败求助
问题描述
推送代码到Heroku平台执行部署时持续失败,已尝试两类修复方案均未生效:
- 在根目录
package.json中声明匹配的Node、NPM对应版本 - 从本地新分支执行
git push heroku new-branch:main形式的推送操作
现附上完整推送报错日志,求可行解决思路。
完整报错日志
Total 0 (delta 0), reused 0 (delta 0) remote: Compressing source files... done. remote: Building source: remote: remote: -----> Building on the Heroku-20 stack remote: -----> Using buildpack: heroku/nodejs remote: -----> Node.js app detected remote: remote: -----> Creating runtime environment remote: remote: NPM_CONFIG_LOGLEVEL=error remote: NODE_VERBOSE=false remote: NODE_ENV=production remote: NODE_MODULES_CACHE=true remote: remote: -----> Installing binaries remote: engines.node (package.json): 16.x remote: engines.npm (package.json): 8.x remote: remote: Resolving node version 16.x... remote: Downloading and installing node 16.16.0... remote: Bootstrapping npm 8.x (replacing 8.11.0)... remote: npm 8.13.2 installed remote: remote: -----> Installing dependencies remote: Installing node modules remote: remote: > openmenu@1.2.1 install remote: > npm --prefix backend install backend && npm --prefix frontend install frontend remote: remote: npm ERR! code ENOENT remote: npm ERR! syscall open remote: npm ERR! path /tmp/build_4492b4f5/backend/package.json remote: npm ERR! errno -2 remote: npm ERR! enoent ENOENT: no such file or directory, open '/tmp/build_4492b4f5/backend/package.json' remote: npm ERR! enoent This is related to npm not being able to find a file. remote: npm ERR! enoent remote: remote: npm ERR! A complete log of this run can be found in: remote: npm ERR! /tmp/npmcache.oFKZI/_logs/2022-07-08T01_43_06_983Z-debug-0.log remote: npm ERR! code 254 remote: npm ERR! path /tmp/build_4492b4f5 remote: npm ERR! command failed remote: npm ERR! command sh -c /tmp/install657244586683.sh remote: remote: npm ERR! A complete log of this run can be found in: remote: npm ERR! /tmp/npmcache.oFKZI/_logs/2022-07-08T01_43_04_790Z-debug-0.log remote: remote: -----> Build failed remote: remote: We're sorry this build is failing! You can troubleshoot common issues here: remote: https://devcenter.heroku.com/articles/troubleshooting-node-deploys remote: remote: If you're stuck, please submit a ticket so we can help: remote: https://help.heroku.com/ remote: remote: Love, remote: Heroku remote: remote: ! Push rejected, failed to compile Node.js app. remote: remote: ! Push failed remote: Verifying deploy... remote: remote: ! Push rejected to openmenu-live. remote: To https://git.heroku.com/openmenu-live.git ! [remote rejected] new-branch -> main (pre-receive hook declined) error: failed to push some refs to 'https://git.heroku.com/openmenu-live.git'
问题定位与修复方案
从报错日志可以确认,Node、NPM版本安装环节完全正常,核心故障点为依赖安装阶段,Heroku构建环境内找不到/tmp/build_xxx/backend/package.json文件,按以下顺序排查即可:
- 检查本地目录结构:确认项目根目录下真实存在
backend/package.json、frontend/package.json两个文件,保证脚本里写的路径和本地实际目录结构一致 - 检查
.gitignore规则:确认没有将backend、frontend目录,或是两个目录下的package.json文件加入忽略列表,否则推送时这部分文件不会被上传到Heroku构建环境,必然触发文件不存在错误 - 修正根目录
package.json的脚本写法:当前install脚本中npm --prefix backend install backend属于冗余错误写法,--prefix backend参数已经指定npm的运行目录为backend,不需要再额外加backend作为安装参数,调整为如下写法即可:"scripts": { "install": "npm --prefix backend install && npm --prefix frontend install", "build": "npm --prefix backend run build && npm --prefix frontend run build", "start": "node backend/你的服务入口文件.js" } - 校验待推送的提交内容:执行
git ls-tree -r new-branch查看待推送到Heroku的分支文件列表,确认backend/package.json、frontend/package.json在列表中,避免因提交不全、分支缓存导致文件漏传 - 如果是monorepo结构,确认Heroku的构建根目录配置正确,不要将构建上下文设置到其他子目录,否则构建时会因路径错位找不到前后端目录
内容的提问来源于stack exchange,提问作者Travis Ly
相关产品推荐
相关产品推荐

