一、前言
現(xiàn)在最流行的版本管理工具非git莫屬,而良好的代碼規(guī)范有助于項目的維護,為了防止一些不規(guī)范的代碼 commit并push到遠(yuǎn)端,我們可以在git命令執(zhí)行前用一些鉤子來檢測并阻止。現(xiàn)在大前端主要有兩種git鉤子插件:husky(jquery與next.js都在用),pre-commit(antd在用)。
下面我將現(xiàn)介紹一個git鉤子,再介紹下husky與pre-commit的用法
二、git鉤子
用過git的小伙伴們都知道git有很多命令commit、push、rebase等等。那這些命令主要是在執(zhí)行.git文件夾中的東西,那么git 鉤子目錄就是在.git文件夾的hooks下,如下所示:
cd .git/hooks
ls -l

上圖為各個鉤子的案例腳本,可以把sample去掉,直接編寫shell腳本來執(zhí)行。
而前端的小伙伴們則可以用插件husky與pre-commit,來使鉤子生效。
注意: 一般.git為隱藏文件,可以把項目拖入IDE中查看,.git文件里的內(nèi)容一般不允許手動更改的。
三、husky
husky能夠防止不規(guī)范代碼被commit、push、merge等等。
首先安裝husky
npm install husky --save-dev
或
yarn add husky --dev
編輯package.json文件,如:
{
"scripts": {
"precommit": "webpack --config ./web/webpack.config.js",
"...": "..."
}
}
當(dāng)你git commit的時候,將會現(xiàn)現(xiàn)執(zhí)行 precommit里的腳本,沒有問題了再提交。

四、pre-commit
pre-commit能夠防止不規(guī)范代碼被commit,沒有husky這么全面,但是你可以接著安裝pre-push等插件來防止對應(yīng)的git操作。下面以pre-commit為例:
首先安裝pre-commit
npm install pre-commit --save-dev
編輯package.json文件,如:
"scripts": {
"test": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1",
"foo": "echo \"fooo\" && exit 0",
"bar": "echo \"bar\" && exit 0"
},
"pre-commit": [
"foo",
"bar",
"test"
]
pre-commit的配置項非常靈活,還可以下面這樣寫:
{
"precommit": "foo, bar, test"
"pre-commit": "foo, bar, test"
"pre-commit": ["foo", "bar", "test"]
"precommit": ["foo", "bar", "test"],
"precommit": {
"run": "foo, bar, test",
},
"pre-commit": {
"run": ["foo", "bar", "test"],
},
"precommit": {
"run": ["foo", "bar", "test"],
},
"pre-commit": {
"run": "foo, bar, test",
}
}
你配置好后,執(zhí)行git commit命令,它將會依次執(zhí)行foo、bar、test來檢測完善代碼。
五、總結(jié)
我們已經(jīng)怎么用git鉤子插件了,那么我們一般用它來做什么呢。
prevent commit時,我們可以把eslint以及test命令加上,檢測代碼規(guī)范:
"scripts": {
"precommit": "lint-staged && npm run test"
}
prevent publish 主干分支時,我們可以把tag打上:
"scripts": {
"precommit": "npm run tag"
}
具體怎么自動化打
tag標(biāo)簽,可以參考我的另外篇文章https://raoenhui.github.io/nodejs/git/2018/03/30/nodejs%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90tag
參考資料
Happy coding .. :)