前言
一千人眼里有一千个哈姆雷特,在一个团队项目中,代码风格不统一,会大大的降低可读性,也会给后期的维护增加时间成本。如果代码风格统一、代码提交信息也简单明了,那么在后期协作以及处理bug时可以达到事半功倍的效果,所以就需要在我们使用git提交时校验eslint和提交信息的格式问题。需要用到的插件 husky
、lint-staged
、commitlint
,写这个之前也看过网上的一些教程,使用的时候多多少少还存在一些问题,下面会把期间遇到的问题和解决方案详细的列出来。
一、husky
husky
是一个为 git 客户端增加 hook 的工具。安装成功后,它会自动在仓库中的 .git/hooks/
目录下增加相应的钩子;比如本项目种需要使用的 commit-msg
、 pre-commit
钩子就会在你执行 git commit
的触发。但是!在我写这篇文档的时候它的版本已经到了husky@7.0.4
,安装后并没有找到相应的钩子,为此也是看官方文档找了好久才找到原因: husky
自v6以后,安装便不再在.git/hooks/
目录下生成相应的钩子,以下会给出新版本和旧版本不同的使用方式。
旧版本的方式我用的是 husky@4.3.8
。
npm install husky@4.3.8
在安装前可以看到.git/hooks/
默认是有一些钩子的样例文件。
安装时如果在控制台打印了以下内容,则代表安装并生成钩子成功Setting up git hooks
。如果没有,检查一下自己安装的版本是多少,新版本安装时是不会打印以下内容的。
安装成功后再去文件目录下,就可以看到一系列钩子文件(不带.sample后缀的),这里我把原来的样例文件删掉了,删不删都一样,不影响。而 commit-msg
、 pre-commit
就是本次我们需要使用的钩子。
如果使用新版本的方式,要知道新版的 husky
工作原理是使用了从git 2.9
开始引入的一个新功能 core.hooksPath
。core.hooksPath
可以让你指定 git hooks
所在的目录而不使用默认的 .git/hooks/
。这样 husky
可以使用 husky install
将 git hooks
的目录指定为 .husky/
,然后使用 husky add
命令向 .husky/hook
中添加对应的hook
。通过这种方式我们就可以只添加我们需要的 git hook
,而且所有的脚本都保存在了一个地方(.husky/目录下)因此也就不存在同步文件的问题了。具体的内容commitlint
也在的官方文档中给出了步骤。
先安装最新的husky
。
npm install husky --save-dev
启动git钩子。启用后就可以看到项目根目录下生成了.husky
文件夹。