利用 git 鉤子做代碼提交前的檢查

前言

在前面《使用ESLint構(gòu)建團(tuán)隊(duì)代碼規(guī)則》《如何在WebStorm中配置ESLint》兩篇文章中我介紹了eslint的搭建和項(xiàng)目中的運(yùn)用缠俺,但還存在一個(gè)問題就是團(tuán)隊(duì)開發(fā)時(shí)显晶,如何保證每個(gè)人提交的代碼都是按規(guī)范修改好的?這時(shí)候我們可以利用git做提交前的最后把關(guān)壹士。

原理

git中磷雇,我們每次執(zhí)行commitpush等操作時(shí)躏救,都會(huì)觸發(fā)一個(gè)或多個(gè)shell腳本唯笙,這些腳本我們稱為鉤子,它們存放在.git/hooks目錄下盒使,我們可以看到目錄下有commit-msg.sample崩掘、pre-commit.sample等文件,這些都是案例文件少办,不會(huì)執(zhí)行呢堰,要想執(zhí)行的話把后面的.sample后綴去掉就可以了。

鉤子執(zhí)行順序是有先后的

  • 前置(pre)鉤子凡泣,在動(dòng)作完成前調(diào)用
  • 后置(post)鉤子枉疼,在動(dòng)作完成后執(zhí)行

當(dāng)鉤子在非零狀態(tài)下退出,git操作就會(huì)停止鞋拟。

所以總結(jié)來說骂维,就是利用這一特點(diǎn),在鉤子里寫入指令贺纲,執(zhí)行g(shù)it操作前先運(yùn)行鉤子里的指令航闺,調(diào)用eslint檢查代碼,如果代碼不符合規(guī)范就非零退出猴誊,git操作就會(huì)停止潦刃,從而達(dá)到我們的目的。

第三方插件

但是鉤子默認(rèn)是不繼承的懈叹,clone下來的項(xiàng)目不會(huì)帶有這些鉤子乖杠,這樣在團(tuán)隊(duì)開發(fā)中就不夠優(yōu)雅了。并且澄成,我們?nèi)绻恍薷囊粋€(gè)文件胧洒,就調(diào)用eslint檢查了整個(gè)項(xiàng)目的文件(即使你能用.eslintignore忽略一部分)畏吓,這樣是性價(jià)比不高的操作。所以我們引入第三方插件幫助解決卫漫。

1. 安裝插件

項(xiàng)目package.json目錄所在路徑下執(zhí)行

npm  install eslint  husky lint-staged --save-dev
  • eslint:進(jìn)行 JavaScript 代碼檢查的基礎(chǔ)包菲饼;
  • husky:在 .git/hooks 中寫入 pre-commit 等腳本激活鉤子,在 Git 操作時(shí)觸發(fā)列赎;
  • lint-staged:參考 Git 中 staged 暫存區(qū)概念宏悦,在每次提交時(shí)只檢查本次提交的文件。
2. 修改 package.json 配置包吝,設(shè)置 precommit 和 lint-staged
"scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "linters": {
      "static/js/**/*.js": [
        "./node_modules/.bin/eslint --fix",
        "git add"
      ]
    }
  },
3. 文件過濾路徑說明

指相對(duì)于package.json的路徑肛根,使用glob pattern匹配模式。

{
    "*.js": "工程下所有的 js 文件",
    "**/*.js": "工程下所有的 js 文件",
    "src/*.js": "src 目錄中所有的 js 文件",
    "src/**/*.js": "src 文件夾下所有的 js 文件"
}
4. 鉤子工作流程說明

當(dāng)開發(fā)者執(zhí)行 git add 操作將代碼提交到暫存區(qū)后漏策,再執(zhí)行 git commit 操作時(shí):

  1. 由于安裝husky后其在.git/hooks中寫入了pre-commit鉤子,該鉤子在 git commit 執(zhí)行時(shí)被觸發(fā)臼氨,執(zhí)行npm run precommit腳本(即lint-staged命令)掺喻;
  2. lint-staged的配置,就是利用linters對(duì)暫存區(qū)的文件路徑應(yīng)用過濾規(guī)則储矩,匹配的文件將執(zhí)行后面配置的任務(wù)感耙,這里的任務(wù)就是調(diào)用項(xiàng)目中的eslint指令檢查文件,如果報(bào)錯(cuò)則先自動(dòng)修復(fù)--fix持隧,最后把沒有問題的代碼加入暫存區(qū)git add即硼。
  3. 如果最終還有報(bào)錯(cuò),則流程終止屡拨,無法執(zhí)行 commit 操作只酥。

總結(jié)

到此整個(gè)項(xiàng)目就應(yīng)用上了eslint進(jìn)行代碼質(zhì)量檢查,解決了開發(fā)中檢查和團(tuán)隊(duì)開發(fā)的問題呀狼,希望能幫助你解決同樣的問題裂允,謝謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哥艇,一起剝皮案震驚了整個(gè)濱河市绝编,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌貌踏,老刑警劉巖十饥,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祖乳,居然都是意外死亡逗堵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門眷昆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砸捏,“玉大人谬运,你說我怎么就攤上這事】巡兀” “怎么了梆暖?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掂骏。 經(jīng)常有香客問我轰驳,道長(zhǎng),這世上最難降的妖魔是什么弟灼? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任级解,我火速辦了婚禮,結(jié)果婚禮上田绑,老公的妹妹穿的比我還像新娘勤哗。我一直安慰自己,他們只是感情好掩驱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布芒划。 她就那樣靜靜地躺著,像睡著了一般欧穴。 火紅的嫁衣襯著肌膚如雪民逼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天涮帘,我揣著相機(jī)與錄音拼苍,去河邊找鬼。 笑死调缨,一個(gè)胖子當(dāng)著我的面吹牛疮鲫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弦叶,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼棚点,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了湾蔓?” 一聲冷哼從身側(cè)響起瘫析,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎默责,沒想到半個(gè)月后贬循,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桃序,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年杖虾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媒熊。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奇适,死狀恐怖坟比,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嚷往,我是刑警寧澤葛账,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站皮仁,受9級(jí)特大地震影響籍琳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贷祈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一趋急、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧势誊,春花似錦呜达、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勋颖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勋锤,已是汗流浹背饭玲。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叁执,地道東北人茄厘。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像谈宛,于是被迫代替她去往敵國(guó)和親次哈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容