【问题标题】:Angular 5.2 : Getting error while building application using VSTS build server : CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memoryAngular 5.2:使用 VSTS 构建服务器构建应用程序时出错:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆内存不足
【发布时间】:2019-05-30 01:50:14
【问题描述】:

突然构建开始失败并出现以下错误:

2019-01-03T12:57:22.2223175Z 执行:致命错误:CALL_AND_RETRY_LAST 分配失败 - JavaScript 堆内存不足
错误 MSB3073:命令“node node_modules/webpack/bin/webpack.js --env.prod”以代码 3 退出。

我已经尝试了所有可用的解决方案,例如:
1) 更新Windows的虚拟内存
2)更新NPM版本和Node版本
3)还尝试添加命令以增加 --max_old_space_size

在发布 Angular APP 时仍然面临同样的问题。它在本地工作,但在发布时在构建服务器上失败 本地出现以下错误:

    <--- Last few GCs --->

[2212:000002BC74FB20D0]   152613 ms: Mark-sweep 1411.4 (1466.9) -> 1411.4 (1466.9) MB, 2117.6 / 0.0 ms  last resort GC in old space requested


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0000032354625EE1 <JSObject>
    1: bindContainer [node_modules\typescript\lib\typescript.js:~22960] [pc=000003AD4C9DBFB9](this=000000063100BE21 <JSGlobal Object>,node=000001B7FE6A7E61 <NodeObject map = 0000020A3EA721A1>,containerFlags=45)
    2: visitNodeArray [node_modules\typescript\lib\typescript.js:~15947] [pc=000003AD4C9A32A5](this=000000063100BE21 <JSGloba...

【问题讨论】:

  • 您说您尝试过使用--max-old-space-size 选项(注意:没有下划线)。您是如何运行该命令的,是这样的吗? node --max-old-space-size=8192 node_modules/webpack/bin/webpack.js --env.prod
  • @RobC 是的,我已经在脚本部分的 Package.json 中添加了它,但仍然遇到同样的问题。

标签: javascript jquery node.js angular npm


【解决方案1】:

当为执行应用程序分配的内存小于运行应用程序时所需的内存时会出现此错误,默认情况下Node分配一定大小的内存。

您可以为每次更改您的 package.json 的构建增加此大小,因此即使在本地或服务器中,应用程序也会以理想的内存分配大小准备发布。

"build": "node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod",

另一个选项在您的 npm 文件夹中,编辑 ng.cmd 以始终增加内存大小。

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe" --max_old_space_size=8192 "%~dp0\..\@angular\cli\bin\ng" %*
) ELSE (
 @SETLOCAL
 @SET PATHEXT=%PATHEXT:;.JS;=;%
 node --max_old_space_size=8192 "%~dp0\..\@angular\cli\bin\ng" %*
)

还有一个不太优雅的解决方案是使用处理此问题的依赖项。 从项目的根目录运行:

npm install -g increase-memory-limit
increase-memory-limit

在发布之前,您需要在服务器中为这些步骤制作脚本。 有关此软件包的更多详细信息:https://www.npmjs.com/package/increase-memory-limit

【讨论】:

  • 您使用的是 Node v8+ 吗?您可以尝试更改 NODE_OPTIONS 环境变量以全局设置 max_old_space_size。 export NODE_OPTIONS=--max_old_space_size=4096 更多细节在这里:github.com/endel/increase-memory-limit
  • 你知道如何以及在哪里设置它,检查堆栈跟踪我已经更新了问题
  • 如果您使用的是 Linux/MAC 环境,您可以添加一个脚本来运行该 bash 命令并检查该变量是否设置为“echo $NODE_OPTIONS”。对于 Windows 使用设置 NODE_OPTIONS=--max_old_space_size=4096
  • 当我使用命令时:“build”:“node --max-old-space-size=4096 ./node_modules/@angular/cli/bin/ng build --prod。为此运行我使用 NPM RUN 构建然后在本地出现错误:构建命令需要在 Angular 项目中运行,但找不到项目定义。
  • 并且BUild Server没有ng.cmd文件
猜你喜欢
  • 2018-08-20
  • 2018-12-05
  • 1970-01-01
  • 2018-03-14
  • 2016-12-19
  • 1970-01-01
  • 2018-06-08
  • 2018-09-25
  • 1970-01-01
相关资源
最近更新 更多