Husky预提交钩子执行lint报错:如何仅输出报告不阻止提交?
解决Husky pre-commit钩子中lint命令阻止提交的问题
方案1:修改pre-commit钩子文件
直接在npm run lint命令后添加|| true,强制让该命令的退出码为0,这样不管lint是否检测到错误/警告,钩子都会正常结束,不会阻止提交。
修改后的pre-commit文件内容:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" echo 📝 Checking lint... npx pretty-quick --staged npm run lint || true
方案2:修改package.json中的lint命令
如果你希望在钩子中执行lint时始终返回成功,但保留手动执行npm run lint时的正常错误码,可以修改package.json里的lint命令,让整个lint流程结束后返回0:
修改后的package.json配置:
"lint": "(npm run lint:eslint && npm run lint:ts) || true", "lint:eslint": "eslint src/ --ext .tsx,.ts", "lint:ts": "tsc --noEmit"
这种方式下,pre-commit钩子可以保持原来的npm run lint命令不变,因为lint命令本身已经会返回0。
原理说明
Husky的pre-commit钩子会根据命令的退出码判断是否允许提交:如果命令返回非0值(比如eslint/tsc检测到错误时返回1),钩子就会终止并阻止提交。添加|| true后,不管前面的命令返回什么值,整个组合命令都会返回0(因为true命令的退出码是0),同时不会影响lint命令的错误/警告输出,满足你“获取报告但不阻止提交”的需求。
内容的提问来源于stack exchange,提问作者Chad Calcote
相关产品推荐
相关产品推荐

