使用Heroku CLI部署生产环境时出现husky未找到错误的解决方案咨询
remote: > husky install remote: remote: sh: 1: husky: not found remote: npm ERR! code 127 remote: npm ERR! path /tmp/build_157848d1 remote: npm ERR! command failed remote: npm ERR! command sh -c husky install remote: remote: npm ERR! A complete log of this run can be found in: remote: npm ERR! /tmp/npmcache.seRIW/_logs/2021-09-25T00_40_22_168Z-debug.log remote: npm ERR! code ELIFECYCLE remote: npm ERR! syscall spawn remote: npm ERR! file sh remote: npm ERR! errno ENOENT remote: npm ERR! test@1.0.0 heroku-prebuild: `npm i -f` remote: npm ERR! spawn ENOENT remote: npm ERR! remote: npm ERR! Failed at the test@1.0.0 heroku-prebuild script. remote: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
核心错误原因
Heroku生产构建环境默认NODE_ENV=production,npm安装依赖时会跳过devDependencies只安装dependencies下的包。而husky作为git钩子工具,通常都会被安装为开发依赖,所以构建阶段执行husky install时找不到对应可执行文件,触发127报错。
排查思路
- 检查package.json中husky的依赖归属,确认是否位于
devDependencies列表中 - 检查package.json的scripts配置,确认
husky install是否配置在heroku-prebuild、postinstall等会在Heroku构建阶段自动触发的钩子中 - 检查Heroku环境变量配置,确认是否开启了生产模式跳过开发依赖安装的默认配置
解决方案
方案1:修改钩子逻辑,生产环境跳过husky安装(最推荐)
修改package.json中对应的钩子配置,增加环境判断,仅在非生产环境执行husky install,示例配置:
{ "scripts": { "prepare": "node -e \"process.env.NODE_ENV !== 'production' && require('husky').install()\"" } }
如果你的husky install是写在heroku-prebuild钩子中,直接删除该命令即可,husky仅需要在本地开发环境初始化时执行,不需要在生产构建阶段运行。
方案2:配置Heroku安装全部依赖(临时验证用)
执行Heroku CLI命令修改环境变量,让构建阶段安装所有开发依赖:heroku config:set NPM_CONFIG_PRODUCTION=false
该方案会增大生产构建包的体积,不建议长期使用。
方案3:将husky迁移到生产依赖(不推荐)
执行本地命令将husky改为生产依赖:npm install husky --save
该方案完全没必要将git钩子工具带入生产环境,仅作为极端场景的临时解决手段。
内容的提问来源于stack exchange,提问作者codr
相关产品推荐
相关产品推荐

