AlloyTeam ESLint 配置指南

發表於2017-08-28

ESLint 是一個應用廣泛的 JavaScript 程式碼檢查工具。本文主要介紹由 AlloyTeam 總結的 ESLint 配置,以及應用 ESLint 配置時的一些經驗和工具。

配置原則

我們依據以下三條原則,研讀了 ESLint 所有的配置項,定製出了心目中「完美」的 ESLint 配置

  1. 能夠幫助發現程式碼錯誤的規則,全部開啟
  2. 配置不應該依賴於某個具體專案,而應儘可能的合理
  3. 幫助保持團隊的程式碼風格統一,而不是限制開發體驗

配置解讀

我們對每一條配置,都有詳盡的註釋,這樣不僅方便了我們自己查閱某項配置的意義和如此配置的原因,也使大家更容易配置出自己心目中的規則:

  • 每一條配置都有註釋說明此配置的用途
  • 對於理解困難的配置,都在註釋中有舉例
  • 對於有爭議的配置,都在註釋中說明了為什麼要這麼配置的原因
  • 對於關閉掉的配置,都在註釋中有對應的原因說明,以及 @off 的標識
  • 對於能夠 autofix 的配置,都在註釋中有標註 @autofix

詳細的配置內容在這裡:

下面列出一個程式碼片段供參考:

使用方法

標準規則

安裝

配置 .eslintrc.js

在你的專案根目錄下建立 .eslintrc.js,並將以下內容複製到檔案中:

React 版

安裝

配置 .eslintrc.js

在你的專案根目錄下建立 .eslintrc.js,並將以下內容複製到檔案中:

Vue 版

安裝

配置 .eslintrc.js

在你的專案根目錄下建立 .eslintrc.js,並將以下內容複製到檔案中:

程式碼改造經驗

如果是一個新專案,應用一個比較嚴格的 ESLint 規則並不是一件難事。

但是如果是一個已經維護多年的老專案,那麼突然引入 ESLint 就會有成千上萬個錯誤。這個時候該如何改造呢?

1. 將所有報錯的配置都關閉

執行 ESLint 之後,會有很多錯誤,這時候我們可以把他們先暫時關閉掉。

由於專案還在不停地迭代,這樣可以保證其他不會報錯的規則能夠應用到新增的檔案上。

這時你的 .eslintrc.js 應該類似與下面的樣子:

小技巧:如果報錯的規則太多了,可以在執行 ESLint 的時候,加上引數 -f json,這樣的話會以 json 格式輸出,然後稍作處理就可以直接得到所有報錯的規則了。

注意:一開始不要開啟 --fix,因為修復的太多了,就難以 review 程式碼了。

2. 針對每個配置,修復所有報錯的檔案,優先修復能夠 autofix 的配置

.eslintrc.js 中的 rules 刪掉一行,然後重新執行 ESLint 檢查。

  • 如果可以 autofix,則加上 --fix 即可
  • 如果不能 autofix,則需要一個檔案一個檔案的手動修改

建議優先修復能夠 autofix 的配置。

在這一步中,我們一次只修復一個 ESLint 配置,這樣的好處是 code review 的時候,目的很明確,不會出現問題。

小技巧:如果一個配置不能 autofix,又有很多檔案報錯,那麼可以嘗試寫一些指令碼去處理,利用 ESLint 中的引數 -f json,可以解析到所有報錯的檔案和報錯的行數。

小技巧:如果寫指令碼也難以處理,那麼可以用編輯器的巨集功能快速的執行重複的操作,對於 VSCode,可以使用這個工具: https://github.com/geddski/macros

注意:不要陷於某一個配置的泥潭,優先解決容易修復的問題。

3. 針對難以修復的配置,將報錯的檔案忽略掉對應的規則,將來再慢慢修復

有時一個配置需要理解業務邏輯,讀懂上下文,很難去修復。

這個時候,可以在報錯的檔案頭部加上 ESLint 註釋,忽略掉對應的規則,將來只要搜尋對應的 ESLint 註釋就可以一個檔案一個檔案的修復問題了。

比如 eqeqeq 限制必須使用 === 而不是 ==,程式碼中使用了 if (result == '2'),然而我們並不知道 ajax 返回的資料是 number 還是 string。這時候就可以在對應的檔案頭部加上:

這樣就可以針對這個檔案關閉掉 eqeqeq 這個規則了。

相比於將規則在 .eslintrc.js 中關閉,將 ESLint 註釋新增到對應檔案的頭部的好處是:這些規則雖然對老檔案不起效,但是新檔案都需要遵守這些規則了。

小技巧:如果需要修改的檔案太多了,可以使用我們開發的小工具,批量給檔案新增 ESLint 註釋: https://github.com/xcatliu/add-eslint-comment

編輯器外掛對 ESLint 的支援

所有編輯器對 ESLint 的支援都很好,可以參考這個頁面安裝你的編輯器外掛。

以 VSCode 舉例,在外掛欄中下載安裝 ESLint 之後,編寫 js 程式碼時就會有類似下圖的提示了:

注意:如果提示說 eslint 未安裝,則需要在命令列安裝專案級別的 eslint,或全域性安裝 eslint:

VSCode 設定中也可以配置一些 ESLint 選項(以及其他相關選項),比如:


快來使用 AlloyTeam ESLint 規則吧!

相關文章