根目录 eslint 8.57,两个老包锁在 7.32,同一条 no-unused-vars 在两边报的行号和提示文案都不同,CI 里同一份代码结果对不上。乍看像缓存或者权限的锅,追下去往往不是。
pnpm -r exec eslint --version pnpm why eslint -r pnpm up eslint@8.57.0 -r -w
追下去是这么回事:eslint 的规则实现和默认配置随大版本变化,插件还要求 peer 版本匹配,版本混装时各包加载的是各自的解析器。扁平配置和旧版 .eslintrc 也不能混用。
碰到「eslint 版本不一致」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。
能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。
具体做法是,在根目录固定一个 eslint 版本 用 overrides 压住子包;插件版本跟着 eslint 一起升 保持 peer 匹配;把配置统一成 flat config 只留一份;pnpm -r exec eslint --version 核对各包实际版本。
验收就看一点,各包 eslint --version 输出一致 同一份代码在根目录跑出的告警条数相同。
