【问题标题】:Javascript out of memory during angular prod build角度产品构建期间 Javascript 内存不足
【发布时间】:2018-01-07 17:03:12
【问题描述】:

我在 Windows 10 中为我的 Angular 4 项目进行产品构建时遇到以下错误

92% chunk asset optimization
<--- Last few GCs --->

[2608:000002518B1007B0]   578653 ms: Mark-sweep 1400.7 (1534.2) -> 1400.7 (1502.2) MB, 1409.9 / 0.0 ms  last resort
[2608:000002518B1007B0]   579952 ms: Mark-sweep 1400.7 (1502.2) -> 1400.7 (1501.2) MB, 1298.6 / 0.0 ms  last resort


<--- JS stacktrace --->

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

Security context: 0000003DF7DA66A1 <JS Object>
    1: DoJoin(aka DoJoin) [native array.js:~97] [pc=0000032E01B053FC](this=000001F775C02311 <undefined>,q=0000010002582251 <JS Array[4]>,r=4,F=000001F775C023B1 <true>,B=000001F775C02471 <String[0]: >,A=000001F775C02421 <false>)
    2: Join(aka Join) [native array.js:~122] [pc=0000032E01E5AD22](this=000001F775C02311 <undefined>,q=0000010002582251 <JS Array[4]>,r=4,B=000001F775C02471 <String[0]...

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

我尝试了什么: 编辑 webpack.cmd 如下(如其中一篇 SO 帖子中所建议的那样),但这没有帮助:

@IF EXIST "%~dp0\node.exe" (
    "%~dp0\node.exe" --max_old_space_size=8048 
    "%~dp0\..\webpack\bin\webpack.js" %*
    ) ELSE (
    @SETLOCAL
    @SET PATHEXT=%PATHEXT:;.JS;=;%
    node --max_old_space_size=8048
    node  "%~dp0\..\webpack\bin\webpack.js" %*
)

额外信息

@angular/cli: 1.0.0
node: 7.9.0
os: win32 x64
@angular/animations: 4.1.3
@angular/common: 4.1.3
@angular/compiler: 4.1.3
@angular/core: 4.1.3
@angular/forms: 4.1.3
@angular/http: 4.1.3
@angular/platform-browser: 4.1.3
@angular/platform-browser-dynamic: 4.1.3
@angular/router: 4.1.3
@angular/cli: 1.0.0
@angular/compiler-cli: 4.1.3

在这个问题的所有 github 和 SO 页面中,建议为 node 分配更多内存,我也这样做了,但没有成功。 我非常需要进行产品构建,请建议我如何克服这个问题

【问题讨论】:

  • 您添加更多内存的版本与答案中发布的版本不同。答案是为 webpack 设置单节点执行标志。你的版本有 2 个节点执行,第一个普通节点增加堆标志但什么都不做,第二个运行 webpack 而没有增加内存。
  • 我是在马塞洛指出之后才注意到这一点的。所以我进行了更改,但仍然遇到相同的错误
  • 尝试更改 ng.cmd 而不是 webpack.cmd
  • 也试过了……没用
  • 我也试过 Ubuntu,也出现同样的错误......

标签: javascript node.js angular typescript webpack


【解决方案1】:

我在%AppData%\npm (Windows) 中的ng.cmd 文件中更改了max_old_space_size,它成功了。

我在启动 ng build --prod --env=prod --base-href . 时不再遇到任何问题

【讨论】:

  • 批准您自己的答案,让人们知道这是解决方案! :-)
  • 这是一个绝妙的答案,实际上为我们解决了这个持续存在的问题。也适用于 Windows 上的 Karma 和 Webpack(相同的文件夹 karma.cmd、webpack.cmd)。干得好。
【解决方案2】:

要实际增加内存大小,您需要在文件调用中使用标志max_old_space_size。将您的代码更改为:

@IF EXIST "%~dp0\node.exe" (
     "%~dp0\node.exe" --max_old_space_size=8048 
     "%~dp0\..\webpack\bin\webpack.js" %*
     ) ELSE (
     @SETLOCAL
    @SET PATHEXT=%PATHEXT:;.JS;=;%
  node --max_old_space_size=8048 "%~dp0\..\webpack\bin\webpack.js" %*
)

这应该可以解决问题。

【讨论】:

  • 我做了你建议的更改@Marcelo,但我仍然遇到同样的错误
  • 我还需要对 webpack 文件进行任何更改吗?其内容如下: #!/bin/sh basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") case uname in *CYGWIN*) basedir=cygpath -w "$basedir";; esac if [ -x "$basedir/node" ];然后 "$basedir/node" "$basedir/../webpack/bin/webpack.js" "$@" ret=$?否则节点 "$basedir/../webpack/bin/webpack.js" "$@" ret=$? fi 退出 $ret
  • 只放入失败的调用。你的机器有多少内存?
  • 我的机器有 12GB 内存
  • 我正在使用此命令进行产品构建: ng build --prod --env=prod --base-href 。这些信息有什么帮助吗?
猜你喜欢
  • 2018-09-04
  • 2019-03-11
  • 2018-01-01
  • 2020-06-15
  • 2020-03-25
  • 2020-11-22
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
相关资源
最近更新 更多