EsLint在webpack中的配置

什么是EsLint?
  • 在團隊開發(fā)過程中懊纳,我們經(jīng)常會遇到這樣一種情況,比如一個語句后邊松逊,有的人會加分號;有的人認(rèn)為不加分號也可以;

  • 在一個團隊里肯夏,如果編程風(fēng)格不能得到統(tǒng)一的話经宏,有的文件是這樣寫的,有的是那樣寫的驯击,團隊代碼維護上烁兰,就會很麻煩,這個時候我們就需要引入一些規(guī)范來約束我們的代碼

  • EsLint就是這樣一種約束規(guī)范代碼的工具

使用步驟
  1. 安裝 npm install eslint --save-dev (我用的是5.12.0版本)

  2. 安裝好后還不行徊都,還需要做一個配置文件沪斟,這個配置文件可以通過命令快速生成 npx eslint --init,運行這個命令后,會問我們要怎么去配置我們的eslint呢暇矫?非常智能啊主之。。李根。槽奕;里邊有3個選擇,第一個的意思是房轿,用一種比較流行的規(guī)范粤攒;第二個選擇的意思是所森,你問我答的形式來一步異步做配置;第三個的意思是夯接,自己已經(jīng)有了JS文件去自動的做配置焕济;

    image.png

  3. 在這里我們使用業(yè)界比較通用的方案,選擇第一項盔几。然后我們會看到有3種不同的模板晴弃。分別是Aribnb公司的前端規(guī)范標(biāo)準(zhǔn)的前端規(guī)范问欠,谷歌的前端規(guī)范。我們選擇Aribnb公司的前端規(guī)范

    image.png

  4. 然后會問我們粒蜈,是否使用React顺献,我這個例子是用React寫的,所以選是


    image.png
  5. 然后會問枯怖,您希望配置文件采用什么格式注整,我們選JavaScript


    image.png
  6. 然后提示我,airbnb需要更高版本的eslint,問是否要升級度硝,選升級

    image.png

  7. 然后會問當(dāng)肿轨,當(dāng)使用這個模板的時候,會有一些依賴需要安裝蕊程,是否現(xiàn)在安裝椒袍?選是


    image.png
  8. 安裝好以后,我們的項目目錄里藻茂,就會多一個.eslintrc.js文件驹暑;里邊內(nèi)容的意思就是,整個工程下邊要使用eslint對代碼進(jìn)行規(guī)范辨赐,用的哪個規(guī)范呢优俘,就是aribnb公司的規(guī)范

    image.png

安裝好了以后,該怎么使用呢掀序? 不需要webpack的情況下帆焕,有兩種方式,簡單的和復(fù)雜的
復(fù)雜的使用方式--- 命令行通過輸入命令npx eslint xxxx不恭,然后在命令行提示
  1. 假如我們現(xiàn)在叶雹,相對src目錄下的代碼做代碼檢測,看下整個文件夾里的代碼是否符合aribnb公司的前端規(guī)范换吧;我們可以運行 npx eslint src;整個命令的意思是浑娜,通過eslint這個工具,幫我們檢測src目錄下的代碼
  2. 然后會有很多提示
    image.png

    3.我們再Eslint里的一個parser(解析器),我們可以到Eslint官網(wǎng)式散,找到Configuring
    image.png
  3. 然后找到parser筋遭,官網(wǎng)默認(rèn)使用的是一個expree的解析器,我們可以給parser配置一個目前用的比較多的解析器babel-eslint,我們先安裝一下npm install babel-eslint --save-dev,安裝好后,配置一下
    image.png
  4. 然后保存重新運行一下npx eslint src漓滔,然后我們可以看到编饺,哪個文件里,第幾行响驴,第幾列有問題透且;1:42的意思是第一行第42列,然后針對具體的問題再去解決
    image.png
簡單的方式---編輯器安裝ESLint插件,直接在代碼里提示
  1. 當(dāng)然豁鲤,這么多的問題秽誊。我們不可能一個一個看,一個一個去配置解決琳骡。我們可以通過在編輯器(我的是VSCode)锅论,安裝一個插件來解決,這個插件就是ESLint
    image.png

    2.安裝好之后楣号,我們再重新打開文件夾最易,我們可以看到,編輯器已經(jīng)自動的把寫的不規(guī)范的代碼給標(biāo)紅了炫狱。
    image.png

    3.然后我們可以把鼠標(biāo)放在標(biāo)紅的代碼上看到具體是什么問題藻懒,該怎么解決
    image.png
  2. 因為Aribnb公司的前端規(guī)范比較嚴(yán)格,有的時候视译,我們不想遵循它的某項規(guī)則嬉荆,那我們可以自己重新配置一下某些規(guī)則,去覆蓋它的一些原有的規(guī)則酷含。
    image.png

    image.png

3.規(guī)則被覆蓋掉以后员寇,我們可以看到,這一行原來的報錯(Component should be written as a pure function組件應(yīng)該作為純函數(shù)編寫)不見了第美。

image.png

  1. 繼續(xù)往下看蝶锋,會看到提示我們Expected indentation of 2 spaces but found 1 tab (應(yīng)縮進(jìn)2個空格,但找到1個制表符)什往,我們可以把縮進(jìn)改為2個空格扳缕,而不是原來的一個tab縮進(jìn)
    image.png
  2. 下邊還有提示 JSX not allowed in files with extension '.js(擴展名為“.js”的文件中不允許使用JSX),這個要求,我們不想遵循别威,也可以修改一下
    image.png

    image.png
  3. 還有一些其他的提示躯舔,比如jsx語法來說,path屬性要加雙引號省古;還有就是return 的結(jié)果后要加一個分號粥庄,這些都是aribnb公司的前端規(guī)范,這就是修改后的
    image.png

    7.最后我們還發(fā)現(xiàn)豺妓,有一個document報錯惜互,document實際上是一個全部變量布讹,如果直接使用了全部變量,也會告訴我們這樣不對训堆,我還需要配置一下
    image.png

    image.png

    image.png

    8.然后描验,我們可以看下list.js,發(fā)現(xiàn)里邊也有報錯,是關(guān)于換行符的坑鱼,原因是因為在各操作系統(tǒng)下膘流,文本文件所使用的換行符是不一樣的。UNIX/Linux 使用的是 0x0A(LF)鲁沥,早期的 Mac OS 使用的是0x0D(CR)呼股,后來的 OS X 在更換內(nèi)核后與 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作為換行符画恰。,我們可以重寫linebreak-style規(guī)則彭谁,來強制執(zhí)行統(tǒng)一的行結(jié)尾,而不受操作系統(tǒng)或整個代碼庫中使用的編輯器的影響
    image.png

    image.png

    image.png

這里會遇到一個問題阐枣,假設(shè)團隊另外一個人马靠,也是用的vscode編輯器奄抽,但是他的編輯器蔼两,并沒有安裝ESLint插件(或者安裝不了),他寫的代碼也就沒有提示哪里不符合規(guī)范逞度,他也就無從知道自己寫的代碼是否規(guī)范额划,所以這種單純靠瀏覽器插件來確保團隊代碼開發(fā)質(zhì)量的方法是不靠譜的,誰能保證團隊每個小伙伴都安裝了插件呢档泽?至于另外一種命令行方法俊戳,比較麻煩,就不說了

這個時候馆匿,我們可以在webpack中把eslint結(jié)合進(jìn)去抑胎,從而讓團隊所有伙伴即使編輯器沒有裝插件,也可以看到代碼中不符合規(guī)范的地方;步驟如下:
  1. 我們需要安裝一個eslint-loader ,命令是npm install eslint-loader --save-dev
  2. 安裝好以后渐北,我們要配置阿逃,一般情況下,我們會對JS文件進(jìn)行檢測赃蛛,所以我們需要修改我們的webpack.config.js配置
    image.png

    image.png
  3. 配置好以后恃锉,啟動服務(wù)器npm run start,我們可以看到,它會幫我們執(zhí)行一下eslint-loader呕臂,并且在終端告訴我們home.js里的代碼是有問題的破托。
    image.png
  4. 如果我們還是在命令行里看提示,那么跟剛才我們直接通過npx eslint src這種方法也沒有區(qū)別了歧蒋,也不是很直觀 土砂,這個時候州既,我們可以在webpack.config.js里的devServer里配置一個overlay參數(shù)
    image.png
  5. 這個配置好以后。當(dāng)我們?nèi)ミ\行webpack-dev-server去做打包的時候瘟芝,一旦過程中出現(xiàn)代碼規(guī)范問題易桃,它會在瀏覽器上談一個提示層,現(xiàn)在我們重新運行npm run start
    image.png
  6. 通過上圖我們可以很直觀的看到哪里出了問題锌俱,當(dāng)我們解決一個問題晤郑,提示就會少一個;所以贸宏,即便我們的編輯器沒有eslint插件造寝,但是借助webpackeslint-loader的配置,我們還是可以快速定位代碼里吭练,關(guān)于代碼規(guī)范的問題诫龙。方便我們快速解決問題。

實際上vue的腳手架工具里鲫咽,當(dāng)我們代碼寫的不規(guī)范的時候签赃,也會給我們一些eslint的提示;這種提示做起來非常簡單分尸,只要在工程目錄下锦聊,安裝eslint,然后再安裝eslint-loader箩绍,然后在webpack.config.js里的derServer配置一個overlay,再去module里配置一個eslint-loader就可以實現(xiàn)在頁面上提示代碼不規(guī)范的功能了

eslint-loader還有很多其他的配置孔庭,這些配置,我們可以通過webpack官網(wǎng)loader里查看

1.比如fix配置,下邊這配置的意思是材蛛,在eslint做檢測時候圆到,如果代碼里有一些淺顯的錯誤,很容易發(fā)現(xiàn)的問題卑吭,它會自動幫我們把代碼修復(fù)掉的


image.png
  1. catch參數(shù)芽淡,可以降低eslint對打包過程性能的損耗,因為我們配置了eslint-loader豆赏,每次打包的時候挣菲。對JS文件都會去分析是否符合規(guī)范,這會降低打包速度河绽。所以配置這個參數(shù)后己单。會稍微提升我們打包的速度
    image.png
真正的項目中,做webpack配置的時候的最佳實踐
  • 在真是的項目里耙饰,一般不建議使用eslint-loader纹笼,因為用了它,不可避免的就會降低打包速度苟跪;那要怎么做呢廷痘?
    寫代碼的時候蔓涧,隨便寫,當(dāng)要把代碼提交到git倉庫的時候笋额,git里有一些鉤子元暴,在git提交代碼的時候,對代碼進(jìn)行eslint的檢測兄猩。在這個鉤子里茉盏,通過命令行去運行eslint src,如果代碼不符合規(guī)范,會在命令行禁止我們把代碼提交到git倉庫里枢冤,當(dāng)我們看到命令行提示的錯誤鸠姨,再去改對應(yīng)的問題。如果所有的問題都解決了淹真,才可以把代碼提交到git倉庫里
  • 但是這種做法讶迁,就沒有辦法實現(xiàn)圖形交互式的eslint的提示(也就是頁面上的提示),這種方式不夠便捷
所以核蘸,具體要怎么做巍糯,還是要看實際情況,如果很影響打包速度客扎,那么我們就要犧牲一些便捷性祟峦。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市虐唠,隨后出現(xiàn)的幾起案子搀愧,更是在濱河造成了極大的恐慌惰聂,老刑警劉巖疆偿,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異搓幌,居然都是意外死亡杆故,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進(jìn)店門溉愁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來处铛,“玉大人,你說我怎么就攤上這事拐揭〕敷。” “怎么了?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵堂污,是天一觀的道長家肯。 經(jīng)常有香客問我,道長盟猖,這世上最難降的妖魔是什么讨衣? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任换棚,我火速辦了婚禮,結(jié)果婚禮上反镇,老公的妹妹穿的比我還像新娘固蚤。我一直安慰自己,他們只是感情好歹茶,可當(dāng)我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布夕玩。 她就那樣靜靜地躺著,像睡著了一般惊豺。 火紅的嫁衣襯著肌膚如雪风秤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天扮叨,我揣著相機與錄音缤弦,去河邊找鬼。 笑死彻磁,一個胖子當(dāng)著我的面吹牛碍沐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播衷蜓,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼累提,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了磁浇?” 一聲冷哼從身側(cè)響起斋陪,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎置吓,沒想到半個月后无虚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡衍锚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年友题,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戴质。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡度宦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出告匠,到底是詐尸還是另有隱情戈抄,我是刑警寧澤,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布后专,位于F島的核電站划鸽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏行贪。R本人自食惡果不足惜漾稀,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一模闲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧崭捍,春花似錦尸折、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粒梦,卻和暖如春亮航,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匀们。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工缴淋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泄朴。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓重抖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親祖灰。 傳聞我的和親對象是個殘疾皇子钟沛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,435評論 2 348

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

  • 前提: 安裝webpack、webpack-cli 一局扶、首先先讓出來一個頁面有內(nèi)容 先添加.gitignore恨统,將...
    codingQi閱讀 1,456評論 0 0
  • 全局安裝webpack 全局安裝webpack會有個問題,就是當(dāng)你有兩個項目依賴于不同版本的webpack三妈,就會有...
    説好的妹紙呢閱讀 1,807評論 0 11
  • 協(xié)同開發(fā)過程中畜埋,不同的編碼習(xí)慣寫出的代碼,差異很大沈跨。日常維護代碼或者修復(fù)bug的時候時候由捎,看各種風(fēng)格的代碼兔综,影響效...
    尤小小閱讀 5,596評論 0 2
  • 目錄第1章 webpack簡介 11.1 webpack是什么饿凛? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,731評論 0 1
  • 使用ESLint對代碼書寫進(jìn)行規(guī)范,可以有效的提高代碼的質(zhì)量软驰,降低代碼出錯的機率涧窒,因此有必要將ESLint引入到項...
    勤勞的小葉閱讀 4,393評論 0 3