Angular 13升级后执行ng lint报JavaScript heap out of memory错误如何解决?
问题原因
该错误是执行ng lint命令时,Node.js进程默认分配的堆内存不足以支撑ESLint处理全量项目文件,导致内存溢出进程崩溃。
解决方案
- 调整lint脚本增加Node堆内存上限
你当前test、start-dev等脚本已经配置了大内存参数,直接把lint脚本也做相同修改即可,将package.json中的lint配置替换为:
"lint": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng lint"
直接给lint对应的Node进程分配8G堆内存,可解决绝大多数中大型项目的lint内存溢出问题。
- 优化ESLint配置降低内存消耗
你当前配置中的createDefaultProgram: true是高内存占用的核心诱因之一,该配置会为所有未匹配到tsconfig的文件额外创建编译程序,会大幅提升内存占用。如果你的所有待校验TS文件都已经包含在src/tsconfig.json和e2e/tsconfig.json的include范围内,直接删除该配置即可,修改后的parserOptions如下:
"parserOptions": { "project": [ "src/tsconfig.json", "e2e/tsconfig.json" ] },
同时可以在ignorePatterns中添加更多不需要校验的目录/文件,减少ESLint的处理量:
"ignorePatterns": [ "projects/**/*", "node_modules/**/*", "dist/**/*", "*.js" ]
- 校验依赖版本兼容性
确保你安装的@angular-eslint相关依赖版本和Angular 13完全适配,版本不兼容会导致意外的内存泄漏问题,Angular 13对应的@angular-eslint大版本为v13,可执行如下命令统一升级到对应兼容版本:
npm install @angular-eslint/builder@13 @angular-eslint/eslint-plugin@13 @angular-eslint/eslint-plugin-template@13 @angular-eslint/schematics@13 @angular-eslint/template-parser@13 --save-dev
- 拆分lint任务(可选)
如果项目体量极大,以上方案仍无法解决,可以拆分lint任务,分批次校验不同目录降低单次任务的内存占用,在package.json中添加拆分后的脚本:
"lint:src": "node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng lint --files 'src/**/*.ts' --files 'src/**/*.html'", "lint:e2e": "node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng lint --files 'e2e/**/*.ts'"
执行时分别运行npm run lint:src和npm run lint:e2e即可。
内容的提问来源于stack exchange,提问作者San Jaisy
相关产品推荐
相关产品推荐

