为了保证团队里的开发人员提交的代码符合规范,我们可以在开发者上传代码时进行校验。 我们常用 husky 来协助进行代码提交时的 eslint 校验。在使用 husky 之前,我们先来研究一下 git-hooks 。
一、git-hooks
执行命令,进入到 hooks 文件夹:
cd .git/hooks
我们期望在 git commit 前,对代码进行检测,如果不能通过检测,就无法提交代码。查看 hooks 中的文件,有个 pre-commit.sample,这是一个模板文件,里面写了一些示例,使用 cat 命令查看它的内容:
cat pre-commit.sample
其中有一句注释:
# To enable this hook, rename this file to "pre-commit".
意思是要使用这个钩子(hook),就要把这个文件重命名成 pre-commit。我们可以保留这个 pre-commit.sample 文件,创建一个新的 pre-commit 文件并给它添加可执行权限:
touch pre-commit
chmod +x ./pre-commit
在 pre-commit 文件中编写脚本:
npx eslint ./src
现在再执行 git commit 时,就会运行 pre-commit 中的脚本,使用 ESLint 检查代码。
重要的是,虽然这样的改动对本地来说是可行的,但 .git 文件夹无法同步到远程仓库,意味着我们本地的改动不会被团队其他人同步到,所以我们要将 git-hook 的执行权移交到外面来。
在根目录下创建 .githooks 目录,并在 .githooks 中创建 pre-commit 文件:
mkdir .githooks
cd .githooks
touch pre-commit
在 pre-commit 中写:
npx eslint ./src
此时提交代码,git 默认读取的仍然是 .git 目录中的 hooks,我们需要配置 git 读取根目录下的 .githooks:
git config core.hooksPath .githooks # 配置 git-hook 的执行权限
并给这个文件添加可执行权限:
chmod +x .githooks/pre-commit
此时提交代码,就会运行 .githooks/pre-commit 中的脚本,使用 ESLint 检查代码。
二、husky
需要注意的问题:
-
使用 husky 生成的
pre-commit文件如果没有可执行权限,需要自己手动添加可执行权限:chmod +x .husky/pre-commit -
查看是否移交了 git-hook 的配置权限:
git config --list查看
core.hooksPath配置是否存在,是否正确指向了.husky。如果没有,需要手动添加:git config core.hooksPath .husky