使用eslint規(guī)范團(tuán)隊(duì)代碼

為什么要用eslint

每個(gè)開(kāi)發(fā)都有自己的編碼習(xí)慣或風(fēng)格插佛,很難說(shuō)誰(shuí)的代碼寫(xiě)的好看,誰(shuí)的代碼寫(xiě)的不好看量窘。對(duì)于一個(gè)團(tuán)隊(duì)項(xiàng)目雇寇,如果每個(gè)開(kāi)發(fā)都按自己的風(fēng)格來(lái)寫(xiě)代碼,項(xiàng)目代碼整體來(lái)看一定是趨于混亂的蚌铜。
使用文檔或者口頭進(jìn)行約束锨侯,再定期進(jìn)行代碼review,也是一種方法冬殃,但難以落實(shí)囚痴,初期可能還行之有效,慢慢的就開(kāi)始懈怠审葬,也不進(jìn)行review了深滚,每個(gè)開(kāi)發(fā)又開(kāi)始按自己喜歡的風(fēng)格進(jìn)行開(kāi)發(fā)了。最好的方法還是使用工具進(jìn)行規(guī)范涣觉。
使用單引號(hào)還是雙引號(hào)痴荐,要不要加分號(hào),縮進(jìn)用2個(gè)空格還是4個(gè)空格官册,都沒(méi)有問(wèn)題生兆,最重要的是整個(gè)項(xiàng)目風(fēng)格的統(tǒng)一。

開(kāi)始使用eslint

不僅僅是格式

1. 編輯器安裝elint插件

以VsCode為例膝宁,在商店搜索eslint安裝鸦难,然后重啟VsCode。如果你使用的是其他編輯器员淫,嗯明刷?換了吧,用VsCode满粗,香辈末!


eslint插件
2. 安裝eslint依賴(lài)

可以全局安裝,也可以安裝到當(dāng)前項(xiàng)目

  • 全局安裝npm i eslint -g
  • 當(dāng)前項(xiàng)目安裝(推薦)npm i eslint --save-dev
3. 生成配置

如果eslint是全局安裝映皆,在項(xiàng)目根目錄執(zhí)行eslint --init挤聘,否則在當(dāng)前根目錄執(zhí)行./node_modules/eslint/bin/eslint.js --init
執(zhí)行這個(gè)命令后,根據(jù)選項(xiàng)生成配置捅彻,下圖是我選擇的组去,可以參考

生成配置

4. 驗(yàn)證和修改配置

執(zhí)行完第3步后會(huì)在根目錄生成.eslintrc.js文件,打開(kāi)代碼步淹,可以看到有些代碼被畫(huà)了紅色波浪線(xiàn)从隆,這是不符合規(guī)范的代碼诚撵,鼠標(biāo)放上去可以查看具體信息,有些校驗(yàn)我們不需要键闺,通過(guò)修改配置可以去掉寿烟。把校驗(yàn)規(guī)則復(fù)制到.eslintrc.js文件的rules下,值為0辛燥,就去掉了這個(gè)校驗(yàn)筛武。

格式問(wèn)題按Ctrl+s保存會(huì)自動(dòng)根據(jù)eslint格式化,其他問(wèn)題需要手動(dòng)處理挎塌。

校驗(yàn)

修改配置
修改配置后效果

配置全局校驗(yàn)格式化命令

如果你已經(jīng)開(kāi)發(fā)了一部分代碼徘六,后期才引入eslint,可以配置格式化命令榴都,對(duì)整個(gè)工程進(jìn)行eslint校驗(yàn)并格式化待锈。
在package.json的scripts里添加配置"lint": "eslint --fix --ext .js src"
執(zhí)行npm run lint命令會(huì)對(duì)src目錄下的.js后綴的文件進(jìn)行eslint校驗(yàn),加了--fix會(huì)直接進(jìn)行格式化嘴高,其他問(wèn)題需要手動(dòng)處理炉擅。

配置命令

webpack alias別名校驗(yàn)問(wèn)題

一般我們會(huì)在webpack里配置別名,比如配置@指向src目錄阳惹,方便引用,但是eslint不認(rèn)識(shí)眶俩,需要額外的處理莹汤。當(dāng)然也可以直接在.eslintrs.js里配置去掉這個(gè)校驗(yàn),但這種一刀切的方式是不推薦的颠印。

// 配置別名
alias: {
   "@": path.resolve(__dirname, "src"),
},
別名校驗(yàn)問(wèn)題

我們使用eslint-import-resolver-alias插件來(lái)解決上面這個(gè)問(wèn)題

  • 安裝插件npm i eslint-import-resolver-alias --save-dev
  • 在.eslintrc.js里添加配置
module.exports = {
  settings: {
    "import/resolver": {
      alias: {
        map: [
          ['@', path.resolve(__dirname, "src")],
        ]
      }
    }
  },
  ...
}

git提交代碼時(shí)校驗(yàn)

1. 安裝husky npm i husky --save-dev

install完成后纲岭,husky會(huì)自動(dòng)配置 git hooks

2. 在package.json里添加配置
{
  ...
  "husky": {
    "hooks": {
      "pre-commit": "npm run lint"
    }
  }
}

這樣在git commit的時(shí)候會(huì)先執(zhí)行eslint校驗(yàn),npm run lint是前面我們配置在scripts里的命令线罕,對(duì)src下的js進(jìn)行校驗(yàn)并格式化止潮。但這樣每次提交都全量校驗(yàn),沒(méi)有必要钞楼。

下面我們來(lái)配置增量校驗(yàn)

3. 安裝lint-staged npm i lint-staged --save-dev

從插件的名字就可以看出喇闸,這個(gè)插件是實(shí)現(xiàn)對(duì)staged(已加入git暫存區(qū)的文件)進(jìn)行校驗(yàn)

4. 修改package.json
{
  ...
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "src/*.js": [
      "eslint --fix --ext .js",
      "git add"
    ]
  }
}

這樣就實(shí)現(xiàn)了git提交代碼時(shí)對(duì)修改的文件進(jìn)行eslint校驗(yàn)。

小提示:commit時(shí)加--no-verify可以跳過(guò)校驗(yàn)哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末询件,一起剝皮案震驚了整個(gè)濱河市燃乍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宛琅,老刑警劉巖刻蟹,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嘿辟,居然都是意外死亡舆瘪,警方通過(guò)查閱死者的電腦和手機(jī)片效,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)英古,“玉大人淀衣,你說(shuō)我怎么就攤上這事〔肝兀” “怎么了舌缤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)某残。 經(jīng)常有香客問(wèn)我国撵,道長(zhǎng),這世上最難降的妖魔是什么玻墅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任介牙,我火速辦了婚禮,結(jié)果婚禮上澳厢,老公的妹妹穿的比我還像新娘环础。我一直安慰自己,他們只是感情好剩拢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布线得。 她就那樣靜靜地躺著,像睡著了一般徐伐。 火紅的嫁衣襯著肌膚如雪贯钩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天办素,我揣著相機(jī)與錄音角雷,去河邊找鬼。 笑死性穿,一個(gè)胖子當(dāng)著我的面吹牛勺三,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播需曾,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼吗坚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呆万?” 一聲冷哼從身側(cè)響起刻蚯,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桑嘶,沒(méi)想到半個(gè)月后炊汹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逃顶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年讨便,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了充甚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霸褒,死狀恐怖伴找,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情废菱,我是刑警寧澤技矮,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站殊轴,受9級(jí)特大地震影響衰倦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旁理,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一樊零、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孽文,春花似錦驻襟、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至减牺,卻和暖如春豌习,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烹植。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愕贡,地道東北人草雕。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像固以,于是被迫代替她去往敵國(guó)和親墩虹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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