Angular Eslint执行异常:ng lint无输出且磁盘占用过高求助
问题描述
执行ng lint时无任何输出,命令行陷入冻结,磁盘占用率飙升至峰值(读取速度最高可达1000MB/秒)。几周前该功能运行正常,疑似Angular 16更新引发,但旧项目也出现相同问题。当前环境为Windows 10 + 最新版Jetbrains Webstorm,重启系统后问题未解决。
项目配置文件
package.json
{"name": "my-app","version": "2.0.8","scripts": {"ng": "ng","start": "ng serve","build": "ng build","test": "ng test","lint": "ng lint","e2e": "ng e2e"},"private": true,"dependencies": {"@angular/animations": "16.1.3","@angular/common": "16.1.3","@angular/compiler": "16.1.3","@angular/core": "16.1.3","@angular/forms": "16.1.3","@angular/platform-browser": "16.1.3","@angular/platform-browser-dynamic": "16.1.3","@angular/router": "16.1.3","file-saver": "^2.0.5","intl": "1.2.5","keycloak-angular": "^14.0.0","keycloak-js": "^21.1.1","ng2-pdf-viewer": "^9.1.4","pdfjs-dist": "3.4.120","primeflex": "^3.3.1","primeicons": "^6.0.1","primeng": "^16.0.2","rxjs": "^7.8.0","ts-mockito": "^2.6.1","xlsx": "https://cdn.sheetjs.com/xlsx-0.20.0/xlsx-0.20.0.tgz","zone.js": "~0.13.0"},"devDependencies": {"@angular-devkit/build-angular": "16.1.3","@angular-eslint/builder": "16.0.3","@angular-eslint/eslint-plugin": "16.0.3","@angular-eslint/eslint-plugin-template": "16.0.3","@angular-eslint/schematics": "16.0.3","@angular-eslint/template-parser": "16.0.3","@angular/cli": "16.1.3","@angular/compiler-cli": "16.1.3","@angular/language-service": "16.1.3","@types/jasmine": "~3.6.0","@types/jasminewd2": "2.0.8","@types/node": "12.12.29","@typescript-eslint/eslint-plugin": "5.59.7","@typescript-eslint/parser": "5.59.7","eslint": "^8.40.0","eslint-plugin-unicorn": "^47.0.0","jasmine-core": "~5.0.0","jasmine-spec-reporter": "~7.0.0","karma": "~6.4.2","karma-chrome-launcher": "~3.2.0","karma-coverage-istanbul-reporter": "~3.0.2","karma-jasmine": "~5.1.0","karma-jasmine-html-reporter": "^2.1.0","ts-node": "8.3.0","typescript": "^5.0.4"}}
angular.json
{"$schema": "./node_modules/@angular/cli/lib/config/schema.json","version": 1,"newProjectRoot": "projects","projects": {"my-app": {"projectType": "application","schematics": {"@schematics/angular:component": {"style": "scss"}},"root": "","sourceRoot": "src","prefix": "app","architect": {"build": {"builder": "@angular-devkit/build-angular:browser","options": {"outputPath": "dist/my-app","index": "src/index.html","main": "src/main.ts","polyfills": "src/polyfills.ts","tsConfig": "tsconfig.app.json","aot": true,"assets": ["src/assets","src/favicon.ico","src/upload.php",{"glob": "**/*","input": "node_modules/ngx-extended-pdf-viewer/assets/","output": "/assets/"}],"styles": ["src/styles.scss"],"scripts": [],"allowedCommonJsDependencies": ["keycloak-js","ng2-pdf-viewer"]},"configurations": {"production": {"budgets": [{"type": "initial","maximumWarning": "3mb","maximumError": "5mb"},{"type": "anyComponentStyle","maximumWarning": "6kb","maximumError": "10kb"}],"fileReplacements": [],"outputHashing": "all"},"development": {"buildOptimizer": false,"optimization": false,"vendorChunk": true,"extractLicenses": false,"sourceMap": true,"namedChunks": true}},"defaultConfiguration": "production"},"serve": {"builder": "@angular-devkit/build-angular:dev-server","options": {"browserTarget": "my-app:build"},"configurations": {"production": {"browserTarget": "my-app:build:production"},"development": {"browserTarget": "my-app:build:development"}},"defaultConfiguration": "development"},"extract-i18n": {"builder": "@angular-devkit/build-angular:extract-i18n","options": {"browserTarget": "my-app:build"}},"test": {"builder": "@angular-devkit/build-angular:karma","options": {"main": "src/test.ts","polyfills": "src/polyfills.ts","tsConfig": "tsconfig.spec.json","karmaConfig": "karma.conf.js","styles": ["src/styles.scss"],"scripts": [],"assets": ["src/assets","src/favicon.ico","src/upload.php"]}},"lint": {"builder": "@angular-eslint/builder:lint","options": {"lintFilePatterns": ["src/**/*.ts","src/**/*.html"]}}}}},"cli": {"schematicCollections": ["@angular-eslint/schematics","@angular-eslint/schematics"]}}
.eslintrc.json
{"root": true,"ignorePatterns": ["projects/**/*"],"overrides": [{"files": ["*.ts"],"parserOptions": {"project": ["tsconfig.json","e2e/tsconfig.json"],"createDefaultProgram": true},"extends": ["plugin:@angular-eslint/recommended","plugin:@angular-eslint/template/process-inline-templates","plugin:unicorn/recommended"],"rules": {"@angular-eslint/component-selector": ["error",{"prefix": "app","style": "kebab-case","type": "element"}],"@angular-eslint/directive-selector": ["error",{"prefix": "app","style": "camelCase","type": "attribute"}],"no-var": "warn","@typescript-eslint/no-explicit-any": "warn"}},{"files": ["*.html"],"extends": ["plugin:@angular-eslint/template/recommended"],"rules": {}}]}
排查与解决建议
- 缩小扫描范围:修改
angular.json中lint配置的lintFilePatterns,先指定单个文件(如src/app/app.component.ts)执行ng lint,若正常则逐步扩大范围,定位是否由特定文件引发问题。 - 禁用Unicorn插件:临时从
.eslintrc.json的extends中移除plugin:unicorn/recommended,测试ng lint是否恢复正常——该插件部分规则在大项目中可能导致性能瓶颈。 - 优化TypeScript配置:检查
tsconfig.json的include/exclude规则,避免ESLint扫描无关文件(如node_modules、dist等)。 - 清理依赖缓存:删除
node_modules和package-lock.json,执行npm install重新安装依赖,排除依赖损坏或版本冲突问题。 - 升级ESLint相关依赖:当前
@angular-eslint版本为16.0.3,可尝试升级至Angular 16兼容的最新版本(如16.2.x),同步更新eslint和@typescript-eslint系列依赖,修复潜在兼容性问题。 - 关闭IDE实时检查:暂时关闭WebStorm的ESLint实时代码检查功能,避免与命令行
ng lint进程资源冲突。 - 检查磁盘状态:磁盘占用异常可能是磁盘本身故障,使用Windows自带的磁盘检查工具扫描修复磁盘错误。
内容的提问来源于stack exchange,提问作者J-Eibe
相关产品推荐
相关产品推荐

