Flat config 推出計畫

我們已經為新的組態系統努力了好幾年。以下是我們計畫如何推出它。

可能難以置信,但 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.parserOptionscontext.parserPath。相反,您應該使用 context.languageOptionscontext.languageOptions.parser,這在 ESLint 以 eslintrc 模式執行時也有效。請參閱我們之前的 文章 以取得更多資訊。

對於可共享組態作者,您應該更新您的可共享組態以使用 flat config 格式。這包括將引用的外掛程式從 package.jsonpeerDependencies 區段移動到 dependencies 區段。

對於外掛程式開發人員,您應該更新您匯出的 configs 以使用 flat config 格式。您外掛程式的其餘部分,包括 rulesprocessors,不需要任何變更。請參閱 外掛程式遷移指南 以取得更多詳細資訊。

對於 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.parserPathcontext.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 與團隊交談。

最新的 ESLint 新聞、案例研究、教學和資源。

Evolving flat config with extends
5 分鐘閱讀時間

使用 extends 演進 flat config

您的 eslint.config.js 檔案現在可以使用 extends 來簡化您的組態。

ESLint v9.22.0 released
1 分鐘閱讀時間

ESLint v9.22.0 已發布

我們剛剛推送了 ESLint v9.22.0,這是 ESLint 的次要版本升級。此版本新增了一些新功能,並修復了先前版本中發現的幾個錯誤。

ESLint v9.21.0 released
2 分鐘閱讀時間

ESLint v9.21.0 已發布

我們剛剛推送了 ESLint v9.21.0,這是 ESLint 的次要版本升級。此版本新增了一些新功能,並修復了先前版本中發現的幾個錯誤。