使用 husky 和 lint-staged 來構(gòu)建你的前端工作流

ESLint 是一個(gè)在前端工具鏈中被眾人熟知的代碼檢查工具,它能夠被開發(fā)者靈活的配置衣盾,使其能夠達(dá)到我們提前制定好的代碼規(guī)范的要求寺旺,并且在編碼過程中實(shí)時(shí)檢測輸入的代碼,對(duì)于不符合代碼規(guī)范的代碼警告或報(bào)錯(cuò)势决。不得不說阻塑,在有了 ESLint 這個(gè)工具之后,團(tuán)隊(duì)之間開發(fā)維護(hù)會(huì)舒服很多徽龟,因?yàn)樵趶?qiáng)制約束下叮姑,你只需要去理解代碼本身的含義就可以了唉地,對(duì)于風(fēng)格的問題則少了很多麻煩据悔。

既然 ESLint 這么好用,那我們?yōu)槭裁从忠虢裉煲榻B的這兩種工具呢耘沼?因?yàn)樵谌粘5膱F(tuán)隊(duì)工作中极颓,自覺地同學(xué)會(huì)將 ESLint 的警告或報(bào)錯(cuò)修復(fù)了再提交代碼,而總有一些不自覺的群嗤,對(duì)于代碼風(fēng)格不重視的同學(xué)菠隆,會(huì)不管報(bào)錯(cuò),直接將代碼風(fēng)格不符合規(guī)范的代碼提交到 git 倉庫中狂秘,久而久之隨之項(xiàng)目的代碼數(shù)量越來越多骇径,ESLint 報(bào)錯(cuò)的地方也會(huì)越來越多,想要一個(gè)一個(gè)修復(fù)實(shí)在是積重難返者春。于是當(dāng)我在使用 Vant 這個(gè)前端開源組件庫的時(shí)候破衔,提交代碼的過程中發(fā)現(xiàn)他們?cè)?commit 之前會(huì)檢查你提交的代碼是否規(guī)范,當(dāng)時(shí)就覺得這個(gè)非常實(shí)用钱烟,后來發(fā)現(xiàn)用 git 提供的一組 hook 可以實(shí)現(xiàn)這樣的功能晰筛,git commit 是最常用的命令之一,它可以觸發(fā)四個(gè) hook 拴袭,分別是 pre-commit, prepare-commit-msg, commit-msgpost-commit读第。 從字面上猜測著四個(gè) hook 分別對(duì)應(yīng)了 “commit 之前”,“準(zhǔn)備 commit log message 的時(shí)候”拥刻,“生成 commit log message 的時(shí)候”怜瞒,“commit 之后”四個(gè)階段。

而我們要解決我們的問題般哼,其實(shí)只需要在 'pre-commit' 這個(gè)階段去寫一段腳本吴汪,就能解決我們檢測代碼的問題尘吗。

正當(dāng)我準(zhǔn)備寫腳本來解決這個(gè)問題的時(shí)候,發(fā)現(xiàn) github 上有一個(gè)已經(jīng)被造好的輪子浇坐,有很多的 star睬捶,于是乎,本著不重復(fù)造輪子的精神近刘,我去看了一下這兩個(gè)工具的文檔擒贸。

husky

husky 這個(gè)庫,老師說我看他的文檔的時(shí)候看笑了觉渴,不為別的介劫,就為了這個(gè)命名。我的理解是作者覺得這個(gè)庫的作用是看(chai)家護(hù)院的二哈么案淋?

Husky can prevent bad git commit, git push and more ?? woof!

Husky 能夠幫你阻擋住不好的代碼提交和推送座韵。一句話很精準(zhǔn)的說明了這個(gè)庫的意義,而配置也非常簡單踢京,

// package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "npm test",
      "pre-push": "npm test",
      "...": "..."
    }
  }
}

就像這樣誉碴,在我們的 package.json 中配置 husky,并且在對(duì)應(yīng)的 git hook 階段來執(zhí)行對(duì)應(yīng)的命令瓣距。于是乎黔帕,不用繁瑣的去配置 git hook 階段的腳本文件了,提供對(duì)應(yīng)的 node 操作變好蹈丸。

lint-staged

lint-stage 這個(gè)庫是這么解釋它的存在的成黄。

在你提交代碼之前,Linting 的運(yùn)行是更有意義的逻杖。當(dāng)你這樣去做了奋岁,那么就會(huì)有更少的錯(cuò)誤進(jìn)入你的代碼庫。

有多種方式能夠配置 lint-staged荸百,例如在 package.json 中添加對(duì)應(yīng)的對(duì)象闻伶,例如使用 JSON 或者 YML 文件來配置,例如寫一個(gè) js 文件來配置等等管搪。

而鑒于我們的 husky 使用了 package.json 的方式來配置虾攻,那么 lint-staged 也保持統(tǒng)一使用同樣的方式好了。

// in package.json
{
  "lint-staged": {
    "*.{js, vue, css}": [
      "eslint",
      "git add"
    ]
  }
}

當(dāng)你這樣配置完成更鲁,在你的 git commit 之前霎箍,會(huì)自動(dòng)觸發(fā) eslint 檢查,如果你的代碼風(fēng)格沒問題澡为,commit 會(huì)成功漂坏,否則提交會(huì)失敗哦。

對(duì)于這樣好的工具,閉著眼睛就能按 star 了顶别,統(tǒng)一團(tuán)隊(duì)的代碼風(fēng)格谷徙,真的很重要。能夠讓錯(cuò)誤防范于未然驯绎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末完慧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子剩失,更是在濱河造成了極大的恐慌屈尼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴孤,死亡現(xiàn)場離奇詭異脾歧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)演熟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門鞭执,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人芒粹,你說我怎么就攤上這事兄纺。” “怎么了是辕?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵囤热,是天一觀的道長猎提。 經(jīng)常有香客問我获三,道長,這世上最難降的妖魔是什么锨苏? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任疙教,我火速辦了婚禮,結(jié)果婚禮上伞租,老公的妹妹穿的比我還像新娘贞谓。我一直安慰自己,他們只是感情好葵诈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布裸弦。 她就那樣靜靜地躺著,像睡著了一般作喘。 火紅的嫁衣襯著肌膚如雪理疙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天泞坦,我揣著相機(jī)與錄音窖贤,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赃梧,可吹牛的內(nèi)容都是我干的滤蝠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼授嘀,長吁一口氣:“原來是場噩夢啊……” “哼物咳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蹄皱,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤所森,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夯接,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盔几,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了上鞠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芯丧,死狀恐怖芍阎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谴咸,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布岭佳,位于F島的核電站,受9級(jí)特大地震影響萧锉,放射性物質(zhì)發(fā)生泄漏珊随。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一柿隙、第九天 我趴在偏房一處隱蔽的房頂上張望叶洞。 院中可真熱鬧禀崖,春花似錦、人聲如沸帆焕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钥星,卻和暖如春沾瓦,著一層夾襖步出監(jiān)牢的瞬間谦炒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工缕探, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爹耗。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓谜喊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親斗遏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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