执行ng build时出现Call retries were exceeded异常求助
ng build 时出现的「Call retries were exceeded」异常 我之前帮不少Angular开发者处理过这个构建报错,结合你给出的环境(Angular-CLI: 8.3.20、Angular: 8.2.7、Node: 12.12.1),下面是几个经过验证的有效解决方案,你可以逐一尝试:
增加Node.js内存分配
这个报错大概率是构建过程中Node内存不足导致的。你可以在执行构建命令时手动指定更大的内存限制:node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod这里设置的是8GB内存,如果还是报错,可以尝试调到10240(10GB),根据你的机器配置调整即可。
调整Angular CLI构建配置
打开项目根目录的angular.json文件,找到architect -> build -> options节点,添加或修改以下配置,减少并发任务数来降低资源占用:"builder": "@angular-devkit/build-angular:browser", "options": { // 保留你已有的其他配置 "maxWorkers": 2, "progress": false }maxWorkers的数值可以根据你的CPU核心数调整,比如4核机器设为2或3就很合适;关闭progress也能减少一些不必要的资源消耗。清理缓存并重新安装依赖
缓存文件损坏也可能触发这类异常,执行以下命令彻底清理缓存和依赖:# 清理Angular构建缓存 ng cache clean --all # 删除node_modules和锁文件,重新安装依赖 rm -rf node_modules package-lock.json npm install如果是Windows系统,把
rm -rf替换成rd /s /q即可。检查并调整依赖版本
Angular 8和Node 12本身是兼容的,但个别第三方依赖可能存在版本冲突:- 可以把Angular CLI升级到8.x的最新稳定版:
npm install @angular/cli@8.3.29 --save-dev(这是8.x分支的最后一个版本,修复了不少构建问题) - 排查项目中的第三方库,比如老版本的UI组件,确保它们适配Angular 8,必要时更新到对应兼容版本。
- 可以把Angular CLI升级到8.x的最新稳定版:
临时禁用差异加载做测试
既然你是为了生成ES5包开启差异加载,可以先临时关闭它,验证是否是差异加载环节出了问题:
在angular.json的build -> options里添加:"target": "es5"这样会强制只生成ES5包,如果构建成功,再针对性排查差异加载相关的配置或依赖问题。
如果以上方案都没解决,你可以尝试把Node版本降级到12.x的早期稳定版(比如12.18.4),或者谨慎升级到Node 14.x(Angular 8对Node 14的兼容性需要测试,建议先备份项目)。
内容的提问来源于stack exchange,提问作者Savan Gadhiya

