
11 天前
当你打开VS Code敲完一个React组件,ESLint突然弹出红色警告:“Card组件定义但未使用”——可明明JSX里正用着它。这种离谱的误报,前端开发者忍了快十年。直到2026年4月,ESLint v10正式发布:不仅把这个bug彻底修了,还直接砍掉了用了13年的旧配置体系,逼着全球每周1.2亿次下载量的用户,全部迁移到新的Flat Config。更狠的是,连兼容旧配置的“拐杖”都直接扔了。为什么一个工具敢对用户下这么狠的手?这背后是一场藏了四年的架构革命。
你可以把旧版ESLint配置想象成一套俄罗斯套娃:.eslintrc文件藏在项目各个目录,规则层层继承,插件隐式加载,到最后你根本说不清某条警告到底来自哪层配置。2013年诞生时,ESLint支持JSON、YAML、JS等多种配置格式是优势,但十年间功能不断叠加,这套“叠叠乐”体系成了噩梦——大型项目的配置文件能写满几百行,monorepo里不同子包的规则还经常打架。

2022年,ESLint团队启动Flat Config项目,目标是把这套套娃彻底拆成平的。核心逻辑很简单:整个项目只认一个eslint.config.js文件,所有规则、插件、忽略路径都明明白白写在一个数组里,后定义的规则直接覆盖前面的,没有任何隐式继承。就像把衣柜里叠了十年的衣服全摊开,每件都能直接拿到。

直给的技术改进是:
languageOptions管理语法、全局变量,拆分旧体系里零散的env、parser配置;除了配置体系的革命,v10最让开发者拍手称快的,是终于原生支持JSX引用追踪。过去,ESLint的变量分析只认JS代码,不认JSX标签——你在return里写<Card />,它看不见,只会揪着你import的Card说“未使用”。为了这个bug,开发者被迫装eslint-plugin-react,再开react/jsx-uses-vars规则,相当于给ESLint戴了个“JSX老花镜”。
v10直接把这个老花镜焊进了ESLint核心。通过升级<a class="wiki-keyword" data-keyword="eslint-scope" href="#">eslint-scope</a>库,它现在能精准识别JSX标签里的变量引用,<Card />终于算成对Card变量的使用。这不仅少装了一个插件,更重要的是,之前被插件规则掩盖的真实“未使用变量”,现在会被真正揪出来——相当于大扫除时,先把挡路的旧家具挪开,才发现角落里藏的垃圾。
但革命总有阵痛。官方直接删了所有旧API,连LegacyESLint兼容层都没留。用旧.eslintrc的团队升级前必须迁移,官方工具能一键生成新配置,但复杂项目还是得手动调整。社区里怨声载道:“理念好是好,但每个插件对Flat Config的支持都不一样,我试了三天才把项目跑起来。”
ESLint这次动大手术,还有个藏在背后的对手:用Rust写的Biome和Oxlint。这些工具的速度是ESLint的50到100倍——同样检查十万行代码,ESLint要跑几分钟,Oxlint只需要几秒。在CI环境里,这意味着开发者少等几十分钟;在本地开发时,保存代码后能立刻看到lint结果,不用再盯着加载条发呆。
ESLint的优势是生态:十年积累的几千条规则、几百个插件,覆盖从React到Vue、从JS到TS的所有场景。但Rust工具正在用性能换市场,不少开发者已经开始试水——只要规则覆盖够90%,剩下的10%可以妥协。
v10的Flat Config其实是ESLint的防御工事:扁平化的配置结构减少了解析和合并的开销,启动速度提升了30%,配置解析时间砍了一半。但这还不够,ESLint团队已经在推进多线程lint、跨文件分析等性能优化,甚至有人提议用Rust重写核心模块。这场性能战,才刚刚开始。
当ESLint团队决定彻底砍掉旧配置体系时,他们赌的是开发者的长期体验——短期的迁移阵痛,换的是未来十年更清晰、更高效的配置方式。就像把堆满杂物的房间彻底清空,虽然累,但接下来每一件东西都能放得明明白白。
更值得关注的是,这场配置革命折射了前端工具的一个趋势:从“怎么方便怎么加”到“怎么简洁怎么来”。十年前,前端工具追求的是“能解决问题”;十年后,开发者开始要求“解决问题的方式不能制造新问题”。
工具的终极进化,是让人忘记工具的存在。 当你敲代码时,ESLint不再弹出莫名其妙的警告,不再需要你花几小时调配置,只是安安静静帮你把代码写对——这才是Flat Config真正想实现的目标。
点击充电,成为大圆镜下一个视频选题!