
可能難以置信,但 ESLint 新組態系統(暱稱 flat config)的 RFC 最早於 2019 年撰寫。直到 2022 年(v8.21.0)我們才發布了實驗性的、可選擇啟用的 flat config 版本。從那時起,我們根據社群的回饋進行了變更和改進。計畫一直是讓目前的組態系統(暱稱 eslintrc)與 flat config 並存一段時間,以便 ESLint 使用者可以順利過渡。隨著 flat config 現在功能完整,我們很高興分享推出計畫。
ESLint v9.0.0 預設使用 Flat config
當 ESLint v9.0.0 發布時,無論是今年年底或明年年初,flat config 都將成為預設組態系統,我們將棄用但不會移除 eslintrc。新功能將僅為 flat config 新增,因此我們鼓勵所有人盡快從 eslintrc 遷移,以充分利用 v9.0.0 將提供的所有功能。
此變更對您的意義取決於您如何使用 ESLint,如果您有任何問題或疑慮,請隨時加入我們的 Discord 與團隊討論。
對於 CLI 使用者,這意味著幾件事
- ESLint CLI 將預設搜尋
eslint.config.js
而不是.eslintrc.*
檔案。 - 如果找不到
eslint.config.js
檔案,CLI 將認為這是一個錯誤,並且不會執行。 - 如果您想使用 eslintrc,您需要將
ESLINT_USE_FLAT_CONFIG
環境變數設定為false
。當您這樣做時,您將在主控台中收到棄用警告。
對於規則開發人員,RuleTester
類別將等同於目前的 FlatRuleTester
類別。如果您將任何與解析器相關的選項傳遞給您的規則測試,您需要更新這些選項以符合 flat config 格式。
您也應該確保您的規則沒有使用 context.parserOptions
和 context.parserPath
。相反,您應該使用 context.languageOptions
和 context.languageOptions.parser
,這在 ESLint 以 eslintrc 模式執行時也有效。請參閱我們之前的 文章 以取得更多資訊。
對於可共享組態作者,您應該更新您的可共享組態以使用 flat config 格式。這包括將引用的外掛程式從 package.json
的 peerDependencies
區段移動到 dependencies
區段。
對於外掛程式開發人員,您應該更新您匯出的 configs
以使用 flat config 格式。您外掛程式的其餘部分,包括 rules
和 processors
,不需要任何變更。請參閱 外掛程式遷移指南 以取得更多詳細資訊。
對於 API 使用者,您需要決定是否要在短期內支援這兩個組態系統。v9.0.0 中的 API 將以以下方式變更
-
ESLint
類別現在將等同於 v8.x 中的FlatESLint
類別。除了少數選項外,這應該在很大程度上是一個透明的變更。 -
LegacyESLint
類別仍將提供,以允許存取 eslintrc 功能,但我們不會在 v9.x 中更新此類別。所有新功能都將僅針對基於 flat config 的 API 實作。 -
FlatESLint
類別仍將提供,以避免不必要地中斷現有的實作,但我們鼓勵您盡快切換到ESLint
。 -
除非
ESLINT_USE_FLAT_CONFIG
環境變數為false
,否則shouldUseFlatConfig()
方法將傳回true
。 -
Linter
類別將預設切換到 flat config 模式,但您仍然可以透過在建構子中將configType
選項指定為"eslintrc"
來將其設定為使用 eslintrc,例如const linter = new Linter({ configType: "eslintrc" });
eslintrc 在 ESLint v10.0.0 中移除
當 ESLint v10.0.0 發布時(很可能在 2024 年底或 2025 年初),eslintrc 組態系統將完全移除。
對於 CLI 使用者,這意味著幾件事
- ESLint CLI 將搜尋
eslint.config.js
而不是.eslintrc.*
檔案。 - 如果找不到
eslint.config.js
檔案,CLI 將認為這是一個錯誤,並且不會執行。 ESLINT_USE_FLAT_CONFIG
環境變數將不再被採用,但不會拋出錯誤。- 特定於 eslintrc 組態檔案的 CLI 選項將被移除。
對於規則開發人員,context.parserPath
和 context.parserOptions
屬性將被移除。
對於可共享組態作者,在 v10.0.0 中沒有其他顧慮。
對於外掛程式開發人員,在 v10.0.0 中沒有其他顧慮。
對於 API 使用者,您需要停止使用來自 /use-at-your-own-risk
進入點的類別。v10.0.0 中的 API 將以以下方式變更
ESLint
類別現在將是與核心互動的唯一方式。LegacyESLint
類別將被移除。FlatESLint
類別將被移除。shouldUseFlatConfig()
方法將始終傳回true
。Linter
類別configType
建構子選項將無效並拋出錯誤。
結論
我們在新組態系統的開發中走了很長一段路,我們還有很長的路要走。這是一個刻意緩慢的推出,以確保每個人都能舒適地更新他們的組態檔案,並盡可能減少干擾。將整個生態系統轉移到新的 API 是一項我們認真對待的責任,我們希望這在分階段推出計畫中顯而易見。您可以繼續關注我們的進度,觀看 實作問題。如果您需要協助或對本文中討論的任何內容有疑問,請發起討論或加入 Discord 與團隊交談。