ESLint 新一代“平铺配置”(Flat Config)

发布于:2025-06-21 ⋅ 阅读:(13) ⋅ 点赞:(0)


前言

遇到一个,配置了eslint,prettier 在ts文件会爆红提示,但遇到vue文件就不会。 自动保存格式化也是。记录思路:
采用了**“分而治之”**的策略,并严格遵守了 ESLint 新一代“平铺配置”(Flat Config)的规则。

最终版 eslint.config.mjs 的工作原理拆解成几个关键点,让你一看就懂:


1. 核心理念:从“一个大包袱”到“流水线作业”

  • 以前的错误尝试:我们试图用一个大大的配置对象,告诉 ESLint “请用这一套规则处理所有文件”。这就像让一个工人同时处理木材、金属和塑料,他会感到困惑,最终导致对 .ts 文件使用了错误的 Vue 解析器。
  • 现在的正确做法:最终的配置 export default [...] 是一个数组,你可以把它想象成一条流水线。当 ESLint 检查一个文件时,会把这个文件依次送上流水线上的每一个工位(也就是数组里的每一个配置对象),看它是否符合当前工位的加工条件。

2. 流水线上的工位(配置对象的拆解)

工位 ①:全局忽略 (ignores)
{
  ignores: ["dist/", "node_modules/", ...],
}

这是流水线的安检门。任何来自这些文件夹的文件,直接被拦下,不参与后续的所有检查,提高了效率。

工位 ②:基础规则铺设 (...tseslint.configs.recommended, ...vuePlugin.configs["flat/recommended"])
...tseslint.configs.recommended,
...vuePlugin.configs["flat/recommended"],

这是流水线的底漆工序。我们直接把 TypeScript 和 Vue 官方推荐的最佳实践规则(它们本身就是配置数组)全部铺开在流水线上。这为我们提供了一个非常扎实的基础。

之前的错误:我们曾错误地把这些数组用 ... 展开到一个对象内部,这在语法上是错误的,导致了 Unexpected key "0" 的报错。现在我们是把它们正确地展开在顶层数组中。

工位 ③:全局定制 (rules, plugins, globals)
{
  rules: { /* ... */ },
  plugins: { /* ... */ },
  // ...
}

这是我们的个性化定制车间。在铺完官方底漆后,我们用这个工位来覆盖、修改或添加一些我们自己团队的规则,比如 uni 全局变量的声明,或者关闭一些我们不在意的规则(如 vue/multi-word-component-names)。

工位 ④:Vue 文件专属的“精加工” (files: ["**/*.vue"])
{
  files: ["**/*.vue"],
  languageOptions: {
    parser: vueParser,
    parserOptions: {
      parser: tseslint.parser,
    },
  },
}

这是解决 .vue 文件问题的关键! 这个工位只处理 .vue 文件。

  • parser: vueParser: 它告诉 ESLint:“当你看到 .vue 文件时,不要自己动手,把它交给专业的 Vue 解析器(vue-eslint-parser。”
  • parserOptions: { parser: tseslint.parser }: 然后,它进一步告诉 Vue 解析器:“当你从 .vue 文件里把 <script> 标签里的代码剥离出来后,请把这部分代码交给 TypeScript 解析器(tseslint.parser 去做精细分析。”

这个“双层解析”的策略,完美地处理了 .vue 文件这种“文件套文件”的特殊结构,所以 ESLint 才能在 <script> 内部正确地应用所有规则。

工位 ⑤:最后的“风格统一官” - Prettier
prettierConfig,

这是流水线的最后一站,也是最重要的一站。prettierConfig 的作用是:关闭所有之前工位上与代码格式相关的 ESLint 规则

这保证了代码“长什么样”(比如分号、空格、换行)这件事,永远只由 Prettier 说了算,彻底避免了 ESLint 和 Prettier “打架”的问题。把它放在最后,确保了它的最高优先级。


总结

我们最终的成功,是因为我们为不同的文件类型(.vue.ts/.js)设立了不同的、专门的“加工工位”,并确保了整条流水线的工序(规则继承、覆盖、解析)是清晰且无冲突的。这就是现代前端工程化中配置管理的精髓所在。


网站公告

今日签到

点亮在社区的每一天
去签到