有条件地运行 git hooks with husky

问题描述

我们有一个运行有 husky 的前端 webpack 驱动项目(因为我们使用 lerna,所以准确地说是 yorkie)。我们有大量的单元测试套件,因此我们希望改进预提交钩子,以便在仅更改非代码文件时不运行测试,例如config.json 或 README.md。有没有人知道一个现成的解决方案,或者我们是否必须编写自己的 shell 脚本来检查 git 状态?感谢提供链接、模式或最佳实践建议。

解决方法

由于找不到现成的解决方案,我们是这样解决的:

# check-files.sh

code_files_count=`git --no-pager diff --name-only --cached |
grep -E "packages\/(?:package1|package2)\/.+\.(?:js|ts|vue|scss|html)$" |
wc -l`
        
if [ $code_files_count == 0 ]
then
    exit 0
fi
        
exit 1

然后在 package.json

"precommit": "./check-files.sh || npm run test:unit"