Node应用中Husky预提交钩子执行失败导致代码无法提交的问题求助
解决 Husky + lint-staged 预提交钩子的 ENOENT 错误
我之前也碰到过一模一样的问题!看你的错误提示 ✖ lint:check failed without output (ENOENT),ENOENT 说白了就是系统找不到你要执行的命令。问题出在你的 lint-staged 配置里——你直接写了 lint:check,但这个是你在 package.json 的 scripts 里定义的 npm 脚本,不是系统全局能直接调用的命令,lint-staged 自然找不到它。
下面是具体的修复步骤,亲测有效:
1. 修正 lint-staged 的任务配置
把 lint-staged 里的任务改成通过 npm run 来调用你的脚本,这样就能正确找到对应的命令了:
"lint-staged": { "*.js": [ "npm run lint:check", "npm run lint:fix", "npm run prettier:fix" ] }
要是你觉得写 npm run 太啰嗦,也可以直接用 npx 调用工具(不过还是推荐用 npm run,和你定义的脚本保持统一,后续维护更方便):
"lint-staged": { "*.js": [ "npx eslint .", "npx eslint --fix .", "npx prettier --write ." ] }
2. 先手动测试配置
改完配置后,不用急着提交代码,先在终端执行 npm run pre-commit 手动跑一遍预提交任务。如果这个命令能顺利执行完所有校验,那再去提交代码,应该就能正常通过了。
额外的小优化
我一般会调整任务顺序,先做格式化再做 lint 检查,因为 prettier 格式化后的代码往往能自动修复一些 lint 问题,减少不必要的错误提示:
"lint-staged": { "*.js": [ "npm run prettier:fix", "npm run lint:fix", "npm run lint:check" ] }
另外别忘了确认项目根目录下有 .eslintrc(或者 .eslintrc.json)和 .prettierrc 这些配置文件,要是没有的话,lint 和格式化工具也可能出问题哦。
内容的提问来源于stack exchange,提问作者Avinash A
相关产品推荐
相关产品推荐

