
可能难以置信,但 ESLint 新配置系统的 RFC,昵称为 flat config,最早于 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
。 -
shouldUseFlatConfig()
方法将返回true
,除非ESLINT_USE_FLAT_CONFIG
环境变量为false
。 -
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 与团队交流。