ng build 时超出调用重试次数异常

Posted

技术标签:

【中文标题】ng build 时超出调用重试次数异常【英文标题】:Call retries were exceeded exception while ng build 【发布时间】:2020-04-19 05:27:43 【问题描述】:

ng build(为差异加载生成 ES5 包...)时遇到异常

An unhandled exception occured: Call retires were exceeded

使用过的版本:

Angular-CLI:8.3.20 角:8.2.7 节点:12.12.1

在日志中也提到了

[error] Error: Call retries were exceeded at ChildProcessWorker.initialize

【问题讨论】:

在 tsconfig.app.json 如果你有 target: es2015target: es5 改变它 @MsuArven 是的!从 es2015 更改为 es5 对我有用。 @Angular 你能告诉我,为什么 es2015 会导致这个异常吗? 这对我有用。我刚刚删除了node_modules/ 并重新安装了。 @TintinSansYeux 如果我们想使用差异加载,我们必须将目标设置为 es2015 【参考方案1】:

10.02.2019 更新

这是@angular/cli 的问题。将版本更新到 >= 8.3.22 应该可以解决问题:see this comment in #16515

原创

基本上构建过程内存不足:请参阅相关的 angular-cli 问题#15493、#16515

建议的补救措施是:

将节点更新到最新版本,例如12.14.0 增加构建过程的内存: 在您的package.json 中将"build" 脚本更改为:node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build 在这种情况下,内存增加到4GB 根据您的项目规模,您可能需要更多

作为一种快速的解决方法,它也可以使用旧版本的angular/clibuild-angular

"devDependencies": 
    "@angular-devkit/build-angular": "0.803.20",
    "@angular/cli": "8.3.20",

如果需要,另一种解决方法是禁用 differential-loading(即跳过 ES5 捆绑包的生成)。然后构建过程将需要更少的内存并且可以工作。

【讨论】:

node --max_old_space_size=4096 对我不起作用。使用 8GB 时,它可以工作。 我遇到了同样的问题,上面的命令已经解决了 - node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build 我有 Angular CLI: 9.1.12,这也发生在我身上。我正在构建一个离子应用程序。 @TmTron,在这种情况下你有什么建议? @D.Hodges 我建议你发布一个新问题并添加 ionic 标签。 这与使用“es2015”构建应用程序有关。使用旧目标“es5”对我有用【参考方案2】:

对我来说,编辑 tsconfig.json 解决了我的问题。

@angular-devkit/build-angular 发生了变化,更新了差分加载。要在您的 Ionic 项目中解决此问题,请将 tsconfig.json 中的 target 值从 “es2015” 更改为 “es5”

更多详情:- https://forum.ionicframework.com/t/ionic-cordova-build-get-stuck-at-generating-es5-bundles-for-differential-loading/180202/4

【讨论】:

谢谢 Aravindh,这也解决了我的问题。 但我需要 es2015,因为 @angular/fire 6.0.3 和其他版本的 es5 失败。 github.com/angular/angularfire/issues/2521 这不是一个“解决方案”,只是一个会产生其他负面影响的破解/补丁【参考方案3】:

使用

node --max_old_space_size=6144 ./node_modules/@angular/cli/bin/ng build

【讨论】:

这就像我的魅力。对于像我这样的其他初学者,您可以将 package.json 中的构建命令替换为 this。【参考方案4】:

几天前我遇到了类似的问题。

我使用的是 Node v10,只能通过在 tsconfig.json 中更改为“target”:“es5”来避免生产构建期间的异常。这消除了不受欢迎的差异负载。

但是,在更新到 Node v14 后,我不再遇到异常,并且能够再次使用 "target": "es2015"。

【讨论】:

【参考方案5】:

上面建议的解决方法确实对我有用,但现在有一个更优雅的解决方案,已针对 Angular9 及更高版本进行了测试。

不再需要手动处理 JS 堆分配 (node --max_old_space_size=4096...),这是我们大多数人都不习惯的。

解决方案就是将"sideEffects": false 添加到您的package.json 文件中。

我在官方 Angular GitHub 问题页面 here 上找到了这个很棒的解决方案,它对我来说很顺利。

【讨论】:

【参考方案6】:

我也遇到了同样的问题,把angular/cli版本改成8.3.19,问题已经解决了。

【讨论】:

【参考方案7】:

这仅适用于已将应用迁移到 Angular 10 的用户 并且增加内存也无济于事

检查 package.json 中的“typescript”和“@types/node”检查它们在https://www.npmjs.com/package/@types/node 中是否兼容

尝试将@angular-devkit/build-angular 降级到 0.8XX.X 以下

【讨论】:

【参考方案8】:

就我而言,我升级了节点的版本。

我运行的是 v10.*,我升级到 v12.20.1 并完成了构建。

我使用节点版本管理器:nvm 来切换节点版本。

【讨论】:

【参考方案9】:

对于 react-natives,您会发现这很有帮助。

稍后谢谢我

npm  install --save-dev  escape-string-regexp

【讨论】:

以上是关于ng build 时超出调用重试次数异常的主要内容,如果未能解决你的问题,请参考以下文章

异步异常重试函数-tryCall

kafka学习总结004 --- 生产者ISR

kafka学习总结004 --- 生产者ISR

运行 dbt 时 BigQuery“超出最大重试次数”

java客户端调用webservice时 连接超时知道是网络原因 ,如何重试如果不重试程序就死琐了,

ng build throws 无法读取空异常的属性“startTag”