致命错误:无效的标记压缩接近堆限制分配失败-离子3中的JavaScript堆内存不足

时间:2018-11-09 17:41:58

标签: javascript ionic-framework ionic3

当我使用“ ionic serve”命令运行ionic 3项目时,出现此错误:

enter image description here

34 个答案:

答案 0 :(得分:37)

对于那些从Google着手解决此问题的人,请使用非角度的一般答案:

每次遇到此错误,可能是因为内存泄漏或Node <= 10和Node> 10管理内存的方式之间的差异。通常,仅增加分配给Node的内存将使您的程序运行,但实际上可能无法解决真正的问题,并且可以再次达到内存限制。我建议您在节点进程开始运行或更新到节点> 10时在其进程中分析内存使用情况。

我发生了内存泄漏。

也就是说,要增加内存,请在运行Node进程的终端中:

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

其中max-old-space-size的值可以是:[2048, 4096, 8192, 16384]

[UPDATE]更多示例以进一步说明:

export NODE_OPTIONS="--max-old-space-size=5120" #increase to 5gb
export NODE_OPTIONS="--max-old-space-size=6144" #increase to 6gb
export NODE_OPTIONS="--max-old-space-size=7168" #increase to 7gb
export NODE_OPTIONS="--max-old-space-size=8192" #increase to 8gb

# and so on...

# formula:
export NODE_OPTIONS="--max-old-space-size=(X * 1024)" #increase to Xgb

# Note: it doesn't have to be multiples of 1024. 
# max-old-space-size can be any number of memory megabytes(MB) you have available.

答案 1 :(得分:20)

我在Visual Studio代码中执行ng build命令时遇到了相同的错误。但是,当我按以下顺序在Windows命令行中执行相同的操作时,我可以成功构建。

第1步。

set NODE_OPTIONS=--max_old_space_size=4096

第2步。

ng build

答案 2 :(得分:8)

请尝试在论坛上的旧消息中指出的解决方案:https://forum.ionicframework.com/t/3-7-0-ios-build-with-prod-not-working/107061/24

打开node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js

更改第一行:

#!/usr/bin/env node

#!/usr/bin/env node --max-old-space-size=4096

尝试将值设置为1024和2048,但对于相对较大的应用,则可能需要4096。

答案 3 :(得分:7)

由于某些原因,上述所有答案均对我不起作用,我做了以下工作来解决我的问题:

  1. 我必须首先删除node_modules文件夹
  2. 在我的PC和
  3. 上重新安装node.js
  4. 然后npm install

答案 4 :(得分:5)

centos服务器7上的相同问题,但这解决了我的问题:

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

X = (2048 or 4096 or 8192 o..)是内存的值

答案 5 :(得分:5)

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

添加参数--build-optimizer解决了我的问题。

更新

我不确定为什么只添加--build-optimizer可以解决问题,但是根据angular docs,应该在启用aot的情况下使用它,因此更新后的命令应如下所示

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

Angular build docs

答案 6 :(得分:5)

在我的情况下,这是一个递归,导致反应耗尽了所有内存。

这是在我重构代码时没有注意到的。

const SumComponent = () => {
  return (
    <>
      <SumComponent />
    </>
  ) 
}

在其他节点应用中,它可能看起来像:

const someFunction = () => {
  ...
  someFunction(); 
  ...
}

答案 7 :(得分:4)

对于我来说,请安装NodeJs 12.10.0版来解决此问题

答案 8 :(得分:4)

替换行

"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. 端口--4300不是恒定的,取决于您选择的端口。

  2. -max_old_space_size = 5096也不恒定;任何值1024,2048,4096等

答案 9 :(得分:3)

当我在Visual Studio代码中执行以下语句时,我得到了相同的错误消息。但是当我在Windows命令行中执行相同的操作时,我可以成功构建。

npm install -g increase-memory-limit
increase-memory-limit
set NODE_OPTIONS=--max_old_space_size=4096
ng build -c deploy --build-optimizer --aot --prod --sourceMap

答案 10 :(得分:2)

我在 Angular 上遇到了同样的问题。然后我写了

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

这个脚本到 package.json 脚本,对我来说这个问题解决了。

并运行项目这个命令:

npm run serve

答案 11 :(得分:2)

对于那些从 angular 提出此问题并希望在您的 javascript 中解决此问题的人的非Google 一般 Dockerfile 答案(替换 {{1} } 与您要分配的 6144 中的内存量)。我的实现在 MB 中工作,由 node.js v14.1.0 使用 DockerOperator 中的 airflow v2.0.1)

Docker version 20.10.5, build 55c4c88

答案 12 :(得分:2)

我没有使用 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

答案 13 :(得分:2)

另一个非角度的答案(我在使用AWS Amplify构建React应用程序时遇到了同样的问题。

如伊曼纽尔(Emmanuel)所说,这似乎是由于节点v10与节点v12处理内存的方式不同。

我试图增加内存,但无济于事。但是使用节点v12做到了。

按照@atlesp此处https://github.com/aws-amplify/amplify-console/issues/440#issuecomment-602626451的说明,检查如何向构建设置添加nvm use $VERSION_NODE_12 image

答案 14 :(得分:2)

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

答案 15 :(得分:1)

如果您在 Windows 上开发并在发布时遇到此问题,请通过官方网站升级 Node.js: https://nodejs.org/en/download/

内存使用处理确实随着 Node 的每个新版本而增加,尽管我没有找到增加的确切数字。

这是唯一对我有用的解决方案。我花了整整一个周末甚至更多时间才解决了这个问题。

答案 16 :(得分:1)

对我来说,问题是有一个额外的node_modules文件夹,我将其重命名为node_modules_old,然后运行npm install来生成新的node_modules。不知何故,该构建肯定仍然仍在拾取node_modules_old文件夹,因此我将node_modules_old从目录中移出来解决此问题。

答案 17 :(得分:1)

请检查您的节点版本:

   $  node -v

如果它的版本为10.1.1,则需要通过以下命令更新根级节点版本

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash


$ source ~/.nvm/nvm.sh

$ nvm ls

$ nvm install 12.18.1

完成后请重启终端或Visual Studio。

工作100美元

对于离子用户,请在package.json中添加以下代码 for ionic user

 "ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
    

答案 18 :(得分:1)

在项目文件夹中运行此命令。使用服务代替构建

node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve  --prod --port=4202

答案 19 :(得分:1)

只需运行此命令

导出 NODE_OPTIONS="--max-old-space-size=8192"

答案 20 :(得分:0)

在为我的项目更新了所有库(如nodejs,打字稿,yarn,npm等)后,此问题消失了。

答案 21 :(得分:0)

对我来说,这是Firebase软件包的问题。

对于您的package.json,仅添加“ @ firebase / database”:“ 0.2.1”,重新安装node_modules即可。

答案 22 :(得分:0)

我在运行 angular 'ng serve' 时遇到了类似的问题 “致命错误:接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足” 就我而言,我发现我的 angular 应用程序使用延迟加载,一个模块已经导入到自己的路由模块中,但有些人也将其导入到 app 模块中,这会导致递归吗?加载中。

这会导致内存不足。

希望能帮到人

答案 23 :(得分:0)

对我来说,我遇到语法错误(未显示)并导致了此错误。

答案 24 :(得分:0)

从节点12更新到节点14为我解决了这个问题

答案 25 :(得分:0)

只需在终端中键入以下内容:

some EN text,EN
some DE text,DE
some ES text,ES

答案 26 :(得分:0)

对我来说,出现此错误是因为我无法访问我的angular.json文件中设置的dist文件夹的输出路径。用更新的凭据重新连接到远程路径后,错误消失了。

答案 27 :(得分:0)

有时候,简单是成功的关键。搜索i而不增加代码中的λ₀s;)

答案 28 :(得分:0)

我想有很多方法可以解决此错误!

在我这边,我的User-agent: * Disallow: /actions/ Disallow: /linkfilter/ Disallow: /tradeoffer/ Disallow: /trade/ Disallow: /email/ Host: steamcommunity.com 中有一个循环。项目A对项目B具有依赖性,而项目B对项目A具有依赖性。

答案 29 :(得分:0)

对我来说,删除所有工作后,我在React项目中运行eslint和更漂亮的修复程序并使用build目录进行格式化时遇到了这个问题。 我猜这是因为文件太多。

答案 30 :(得分:0)

检查您的文件夹名称。如果您的文件夹名称中包含空格,则会产生此类问题。重命名不带空格。希望它能起作用。

答案 31 :(得分:0)

#!/ ionic / app-scripts.js dint工作中的/ usr / bin / env节点--max-old-space-size = 4096

修改

node_modules / .bin / ionic-app-scripts.cmd

通过添加:

@IF EXIST“%〜dp0 \ node.exe”( “%〜dp0 \ node.exe”“%〜dp0 .. @ ionic \ app-scripts \ bin \ ionic-app-scripts.js”%* )ELSE( @SETLOCAL @SET PATHEXT =%PATHEXT:;。JS; =;% 节点--max_old_space_size = 4096“%〜dp0 .. @ ionic \ app-scripts \ bin \ ionic-app-scripts.js”%* )

辛勤工作

答案 32 :(得分:0)

我已经删除了现有的节点模块,并运行以下命令来解决我的问题

npm install -all
npm audit fix

答案 33 :(得分:0)

如果在VSCode上运行React应用程序时发生这种情况,请检查您的propTypes,未定义的Proptypes会导致相同的问题。