Flat config 推出计划

我们已经为新的配置系统工作了数年。以下是我们计划如何推出它。

可能难以置信,但 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.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

  • 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.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 的小版本升级。此版本添加了一些新功能,并修复了先前版本中发现的几个错误。