Flat Config 是什么
ESLint 9 起默认使用 Flat Config:配置写成 eslint.config.js,默认导出一个数组,每个元素包含文件范围与规则。相比旧的级联配置,文件匹配与规则合并都变成显式的,团队不再依赖 extends 的隐式覆盖顺序;老配置可以借助兼容层过渡。
基本信息
| 配置形态 | eslint.config.js 默认导出数组 |
|---|---|
| 数组元素 | files 指定范围,rules 指定规则 |
| 兼容过渡 | 用 FlatCompat 加载旧的 extends 配置 |
| 版本 | ESLint 9 及以后默认按此格式查找配置 |
典型使用场景
- 新项目:直接采用 flat config,不必再考虑级联覆盖规则
- 存量项目迁移:一个目录一个目录地搬,中间配合过渡层
- 按语言分别配置:对 JS、TS、组件文件设置不同规则集
- 统一忽略范围:用 ignores 项集中声明忽略目录
- 插件接入:每个插件作为独立配置项引入,来源更清楚
迁移时的检查点
- 插件是否已经提供 flat 版本
- 旧的 extends 与 overrides 如何映射到数组元素
- 忽略目录是否全部搬进 ignores 项
- 编辑器与 CI 是否使用同一份配置
示例
示例
// eslint.config.js
export default [
{ files: ["**/*.js"], rules: { "no-unused-vars": "error", eqeqeq: "error" } },
{ files: ["**/*.test.js"], rules: { "no-console": "off" } },
{ ignores: ["dist/**", "coverage/**"] },
];新旧写法对照
| 旧配置 | flat 配置 |
|---|---|
| extends 级联 | 数组元素按顺序覆盖 |
| overrides 匹配 | 每个元素自带 files |
| 独立的忽略文件 | 配置里的 ignores 项 |
| 插件名字符串 | 显式导入插件对象 |
新项目直接采用 flat config;老项目按插件支持度分批迁移,中间用兼容层过渡。
在评审中的用法:把配置迁移与规则调整分成两次提交,评审者可以只看配置本身;规则松紧要说明影响范围,避免顺带放宽整条检查。
数组顺序决定覆盖关系:越靠后的元素优先级越高,把关闭规则的那一项放在最后,通常就是团队想要的效果。
把忽略目录写进配置之后,旧的忽略文件就可以删掉,避免两者并存时出现漏网文件。
两种配置格式长期并存:实际生效的规则与预期不符,排查时容易找错文件。