在使用ng build过程中,出现了“超过呼叫重试次数”异常。

76

当我执行ng build命令(为差异性加载生成ES5包时),我遇到了一个异常。


An unhandled exception occured: Call retires were exceeded

使用的版本:

  • Angular-CLI:8.3.20
  • Angular:8.2.7
  • Node:12.12.1

同时在日志中提到:

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

24
在 tsconfig.app.json 中,如果你有 target: es2015,请将其改为 target: es5 - PierreD
3
@MsuArven 是的!将代码由ES2015改为ES5对我有用。 - Savan Gadhiya
8
Angular,请问您能否告诉我,为什么es2015会引发此异常? - Savan Gadhiya
2
这对我有用。我只是删除了 node_modules/ 并重新安装。 - Schmorrison
4
如果我们想要使用差异化加载,就必须将目标设置为es2015。 - hosein
显示剩余2条评论
11个回答

68

更新于2019年10月2日

这是一个与@angular/cli有关的问题。将版本更新到 >= 8.3.22 应该可以解决此问题:请查看#16515中的此评论

原始内容

基本上,构建过程用尽了内存:请参见相关 angular-cli 问题 #15493#16515

推荐的解决方案是:

  • 将 node 更新到最新版本,例如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",

另一个解决方法是禁用差异化加载(即跳过ES5包的生成),如果您需要的话。那么构建过程所需的内存将更少,也许可以运行。


7
node --max_old_space_size=4096 对我没有起作用,但使用8GB就可以了。 - Jonas Marty
我曾经遇到过同样的问题,但是通过上述命令解决了 - node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build - purnima kamble
只有禁用“差异加载”才对我起作用 :( - Obay Abd-Algader
如果您删除与旧版浏览器的兼容性,则有助于提高性能。 - nelson6e65
我的AWS实例已经更改为2048,并且配备了2GB的RAM - 运行良好! - Serhii Topolnytskyi
1
这与使用“es2015”构建应用程序有关。在我的端上使用旧目标“es5”可以工作。 - Zdravko Kolev

40

1
但是我需要es2015,因为es5在@angular/fire 6.0.3和其他版本中失败了。 https://github.com/angular/angularfire/issues/2521 - nelson6e65
3
这不是一个“解决方案”,只是一种hack/补丁,会产生其他负面影响。 - Richard

9

使用

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

这个很好用。对于像我这样的初学者,你可以将package.json中的构建命令替换为这个。 - Suyog

5

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

当时我使用的是Node v10,只有将tsconfig.json中的"target": "es5"更改为"target": "es2015"才能在生产构建期间避免异常,但这会移除差异加载(differential loading),这是不想要的。

然而,更新到Node v14后,我不再遇到异常,并且可以再次使用"target": "es2015"。


这是当前的工作解决方案。谢谢! - stoneshishang

3
以上提出的解决方法对我有用,但现在有一个更加优雅的解决方案,已经经过Angular9及以上版本测试。
不再需要手动操纵JS堆分配(node --max_old_space_size=4096...),这是我们大多数人不舒服的地方。
解决方案只是在你的package.json文件中添加"sideEffects": false
我在官方的Angular GitHub问题页面这里发现了这个很棒的解决方案,对我来说运行得非常顺畅。

1

我也遇到了同样的问题,通过将angular/cli版本更改为8.3.19,问题已得到解决。


0

我真的尝试了多天(多次!)来解决这个问题(而不增加服务器上允许的RAM内存,因为我已经达到了最大允许值(共享主机))。除了-

--loglevel verbose

我用它来查看是什么导致了问题。但似乎实时显示完整日志需要大量内存。从我的命令中删除这个后,一切都可以在第一次构建时完成。


0

这仅适用于已将应用程序迁移到Angular 10且增加内存也无法解决问题的人。

检查您的package.json中的"typescript"和"@types/node",检查它们是否与https://www.npmjs.com/package/@types/node兼容。

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


0
确保您不使用旧版本的Node。 nvm use 16 或更高版本对我来说有效!

-1
在我的情况下,我升级了Node的版本。
我之前运行的是v10.*,我将它升级到了v12.20.1,然后构建顺利完成了。
我使用Node版本管理工具:nvm来切换Node的版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接