使用 pre-commit Hooks 检查代码

1,285 阅读1分钟

pre-commit 钩子是在 git commit 执行后在输入commit message之前触发的钩子。它可以用于检查即将提交的快照、查看是否忘记某些内容、确保测试运行或检查代码等。除了手动修改hooks也可以使用一些git hooks工具, 其中husky内部也是修改git hooks。

配置

编辑项目根目录下的隐藏文件.git/hooks/pre-commit进行修改,简易配置可参考如下:

#!/bin/bash
 
# 读取git暂存区的.js 和 .jsx文件
files=$(git diff --cached --name-only | grep -E '\.jsx?$')
 
# 在控制台打印文件列表
echo 'staged 文件列表如下:'
echo $files
 
# 如果文件列表为空,退出执行环境,继续执行commit操作
if [[ $files = "" ]] ; then
    exit 0
fi

# 设置 校验失败变量,默认为0,代表校验成功
failed=0
 
# 循环文件列表
for file in ${files}; do
    # 判断文件是否存在(-e 表示 exists)
    if [ ! -e $file ] ; then
        continue
    fi
 
    # 在控制台打印该文件的eslint检验结果,如果通过,则返回空
    git show :$file | ./node_modules/.bin/eslint $file --color --fix
    # 文件未通过eslint检验,标记为失败
    if [[ $? != 0 ]] ; then
        failed=1
    fi
done;
 
# 有文件未通过检验,退出执行环境,中断commit操作
if [[ $failed != 0 ]] ; then
    echo "❌ error: eslint failed, please check the code!"
    exit $failed
fi
参考文档