如何避免执行npm i时重复向pre-commit添加npx lint-staged?
解决husky pre-commit钩子重复添加命令的问题
问题原因
每次执行npm i时,prepare脚本里的husky add命令会追加指定内容到pre-commit文件中,而非检查内容是否已存在,导致相同命令被重复添加。
解决方案
方案1:检查文件内容后再添加(推荐,不覆盖原有自定义内容)
修改package.json中的prepare脚本,通过shell命令先检查pre-commit文件是否已包含目标命令,仅当不存在时才执行添加操作:
"prepare": "husky install && grep -q 'npx lint-staged' .husky/pre-commit || npx husky add .husky/pre-commit \"npx lint-staged\""
grep -q 'npx lint-staged' .husky/pre-commit:静默检查文件中是否存在目标命令,存在则返回成功状态||:仅当前面的检查失败(即文件中无该命令)时,才执行后面的husky add命令
方案2:简化prepare脚本(适合钩子已初始化完成后)
先执行一次npm i完成钩子的初始化创建,之后修改package.json的prepare脚本,只保留husky install(仅负责启用钩子,不会修改钩子文件内容):
"prepare": "husky install"
后续再执行npm i时,就不会再往pre-commit文件中添加命令了。
方案3:使用husky set覆盖钩子内容(适合钩子仅需单条命令的场景)
如果你的pre-commit钩子只需要npx lint-staged这一条命令,可以用husky set代替husky add,set命令会直接覆盖钩子文件的内容,而非追加:
"prepare": "husky install && npx husky set .husky/pre-commit \"npx lint-staged\""
注意:若钩子文件中有其他自定义命令,使用set会将其覆盖,需谨慎使用。
内容的提问来源于stack exchange,提问作者kan
相关产品推荐
相关产品推荐

