严重错误:在堆限制附近无效的标记压缩导致分配失败 - Ionic 3中的JavaScript堆内存不足

563

当我使用ionic serve命令运行Ionic 3项目时,我遇到了这个错误:

JavaScript致命错误:在堆限制附近无效的标记-压缩分配失败


请查看此答案:https://dev59.com/zlkT5IYBdhLWcg3wefQn#66914674 - sidverma
46个回答

10
  1. 导出NODE_OPTIONS="--max-old-space-size=6144" #它将增加到6GB.

-------如果未解决,请尝试以下第2步------------- 2)只需将Node版本更新到最新版本即可解决此问题。

-------如果未解决,请尝试以下第3步------------- 3)只需在Windows终端中运行此命令。 set NODE_OPTIONS=--max_old_space_size=4096


9
由于某些原因,之前的所有答案对我都没有真正起作用。我按照以下步骤解决了我的问题:
  1. 首先,我必须删除 node_modules 文件夹
  2. 在我的电脑上重新安装 Node.js
  3. 然后运行 npm install

第二步不是必需的。我尝试了上面的解决方案,没有第二步也可以正常工作。 - Analyst
1
你可能不需要第二步骤,我只是分享了对我有用的内容 :) - sambayour

9

对于我来说,我的语法错误(未显示出来)导致了这个错误。


1
我也遇到了同样的问题。谢谢! - Ajay Lingayat
在我的情况下,是忘记在ngClass末尾删除逗号。希望能对某些人有所帮助。 - Terry Windwalker
天啊,我代码里居然有这样的语句 import { async } from '../../../../public/js/app'。不知道为什么会出现这种情况,你刚刚帮我节省了好几个小时! - Dale Ryan

9
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true

32
虽然这段代码可能回答了问题,但提供关于为什么和/或如何回答问题的附加上下文,可以增强其长期价值。 - Eric Leschinski

9

在我的情况下,添加参数--build-optimizer解决了问题:

node --max_old_space_size = 4096 ./node_modules/@angular/cli/bin/ng build --prod --build-optimizer

我不确定为什么只添加--build-optimizer就可以解决问题,但根据Angular文档,它应该与启用预编译(AOT)编译一起使用,因此更新后的命令应该如下:

--build-optimizer=true --aot=true

Angular 构建文档


7

将以下这一行

"start": "ng serve -o --port 4300 --configuration=en"

替换为

"start": "node --max_old_space_size=5096 node_modules/@angular/cli/bin/ng serve -o --port 4300 --configuration=en"

注意:

  1. port--4300不是固定值,取决于您选择的端口。

  2. --max_old_space_size=5096也不是固定值; 可以是任何值:1024,2048,4096等。


1
这个方法对我有效。从命令行设置NODE_OPTIONS没有起作用,我猜测是因为Visual Studio使用了一个新的进程或者其他原因。将更改硬编码到我的package.json scripts块中解决了问题。 - user101289

6

我在Angular上面也遇到了同样的问题。然后我写了以下代码

"serve": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve"

这个问题可以通过将此脚本添加到 package.json 的脚本中来解决。运行项目时,请使用以下命令:
npm run serve

这几乎是无法理解的。你能修复它吗? - Peter Mortensen
首先,您必须将脚本添加到package.json中的脚本块中,然后您必须使用此命令运行项目:npm run serve - @PeterSmith - Ali Alizade

6

运行以下命令:

export NODE_OPTIONS="--max-old-space-size=2048"

检查您目前的使用量:

> node
> v8.getHeapStatistics()
{
  total_heap_size: 6049792,
  total_heap_size_executable: 524288,
  total_physical_size: 5477720,
  total_available_size: 1094444024,
  used_heap_size: 4141728,
  heap_size_limit: 1098907648,
  malloced_memory: 8192,
  peak_malloced_memory: 582752,
  does_zap_garbage: 0,
  number_of_native_contexts: 2,
  number_of_detached_contexts: 0
}

然后是 heap_size_limit: 1098907648


6
在您的项目文件夹中运行此命令。使用 serve 而不是 build。
node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve  --prod --port=4202

5

我用终端执行了下面的命令来解决这个问题,而不是使用 ng build 命令。

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

然后执行 ng serve 命令。

这是我的终端显示效果。

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS D:\ProjectPath\Project1> node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng build --prod

--prod 已经被弃用,请使用 --configuration production 代替。 - DFSFOT

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