[note] 建立公司內部使用的 eslint-config package
在現今的 JavaScript 專案中,為了確保程式碼的品質和撰寫風格,ESLint 的設定和使用幾乎可以算是標配。
透過 ESLint 除了可以避免掉許多不必要的程式語法錯誤,還能確保開發者彼此之間有一致的程式撰寫風格(coding style),才不會 A 開發者寫出來的程式碼和 B 開發者寫出來的,在撰寫風格上有太大的落差。
為什麼要建立 OneDegree 自己的 eslint-config package
eslint-config package 指的就是把 ESLint 設定檔,打包成一個 npm 套件,這裡面包含了要套用那些規則、套用這些規則的邏輯等等,目的則是讓不同專案能夠直接套用。幾個大家可能聽過的像是 eslint-config-standard、eslint-config-airbnb、eslint-config-prettier、eslint-config-google、...等等,都是包好的 ESLint 設定檔,讓想要套用的開發者可以直接下載使 用。
一般來說,每個專案都會有獨立的一隻 ESLint 設定檔,可以針對不同專案進行設定就好,不需要額外抽成一個套件。然而,在 OneDegree 中有許多不同的專案同時在進行,包含 B2B 和多個 B2C 專案,如果每次都要在各個專案中複製貼上相同的設定,會是相當麻煩的一件事;另外,如果在專案中有針對部分規則進行個別的微調,久了之後可能會忘了原始套用的設定是長什麼樣子,甚至發生不同的專案套用的設定差異過大的情況。
這時候如果可以把 ESLint 中的設定打包成一個套件,未來新開專案時只需要使用 npm 安裝這個套件後,就可以套用到公司內部一致的設定,將會省下非常多不必要的麻煩。
認識 ESLint 中的幾個設定欄位
實際上要建立 eslint-config 的套件並沒有太大的難度,因為本質上就是把寫好的 ESLint 設定進行匯出而已。比較需要釐清的反而是先了解和釐清 ESLint 設定檔中的幾個欄位。下面是一隻 ESLint 設定檔常見的欄位:
// .eslintrc.js
module.exports = {
env: {
browser: true,
es2021: true,
},
extends: ['plugin:react/recommended', 'airbnb'],
parserOptions: {
ecmaFeatures: {
jsx: true,
},
ecmaVersion: 12,
sourceType: 'module',
},
plugins: ['react'],
rules: {},
};
其中包含了:
-
env
:讓 ESLint 知道那些是原本就存在專案中的全域變數(global variable),例如,alert
、window
等等,否則當你在專案中直接使用了這些全域變數卻又沒有定義的話,ESLint 就會認為這個變數不存在而報錯。 -
parserOptions
:告訴 ESLint 專案中所使用的 JavaScript 語法版本(例如,ECMAScript6、ECMAScript7)。 -
rules
:透過這個欄位的設定,可以讓 ESLint 知道當不同的規則觸發時,ESLint 要用什麼類型的方式給予提示,是要當成是 error、warning、或是不用理會。例如,在這裏可以設定,假如開發者在程式中定義了變數卻沒有使用到這個變數時,要當成是嚴重的錯誤(error),出現警告的提示(warning)就好,或是可以完全不用理會這個情況(off)。
除了這幾個欄位之外,比較容易混淆的則是 plugins 和 extends 這兩個欄位,因此會花多一些的篇幅來描述。