升级nx/Angular后import/no-deprecated规则导致lint极慢如何解决?
性能问题根因
你遇到的耗时异常是eslint-plugin-import@2.22.1版本的已知性能缺陷导致的:import/no-deprecated规则需要遍历所有导入源的导出声明、JSDoc标记来判断是否为废弃导出,而Nx 12、@angular-devkit/build-angular@12.x调整了monorepo的依赖解析逻辑,大幅扩大了该规则的扫描范围,旧版本规则没有做扫描结果缓存,因此耗时出现指数级上涨。
解决方案(按优先级排序)
- 升级
eslint-plugin-import到2.24.0及以上版本:该版本针对import/no-deprecated做了定向性能优化,新增了扫描结果缓存、默认跳过第三方依赖包的废弃校验逻辑,实测同场景下该规则耗时可以降低95%以上,升级命令参考:npm install eslint-plugin-import@^2.29.0 --save-dev - 调整规则校验范围:如果升级后性能仍不符合预期,可以在ESLint配置中缩小该规则的生效范围,仅对业务源码目录开启,排除自动生成代码、公共依赖库目录,配置示例:
{ "rules": { "import/no-deprecated": ["warn", { "exclude": ["node_modules/**", "generated/**", "public-libs/**"] }] } }
也可以搭配ESLint的overrides配置,仅对src目录下的业务代码生效。
- 替换校验逻辑或关闭规则:如果团队没有强制校验废弃导入的要求,或需要进一步压缩CI环节的lint耗时,可以直接关闭该规则。废弃导入的校验需求可以通过开启tsconfig.json的
noDeprecated编译选项实现,TypeScript原生校验的性能远高于ESLint规则。
内容的提问来源于stack exchange,提问作者user3841429
相关产品推荐
相关产品推荐

