352

当我使用该命令运行 Ionic 3 项目ionic serve时,我收到此错误:

致命错误的屏幕截图:无效标记压缩接近堆限制分配失败 - JavaScript

4

40 回答 40

358

对于那些从 Google 提出这个问题的人的非 Angular 一般答案:

每次遇到此错误时,可能是由于内存泄漏或 Node.js <= 10 和 Node.js > 10 管理内存的方式之间存在差异。

通常只是增加分配给 Node.js 的内存将允许您的程序运行,但可能无法真正解决真正的问题,节点进程使用的内存仍可能超过您分配的新内存。我建议在 Node.js 进程开始运行或更新到 Node.js > 10 时分析内存使用情况。

我有内存泄漏。这是一篇关于在 Node.js 中调试内存泄漏的好文章。

也就是说,为了增加内存,在运行 Node.js 进程的终端中:

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

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

更多示例以进一步说明:

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

# and so on...

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

# 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.

查看 max-old-space-size 的当前值(以 MB 为单位)

要查看 max-old-space-size(以 MB 为单位)的当前(不准确但非常接近)值,请在终端中运行

node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'
于 2020-01-03T03:49:21.363 回答
87

就我而言,我通过安装 Node.js 版本 12.10.0 解决了这个问题。

于 2019-09-17T20:00:02.033 回答
80

我在CentOS服务器 7上遇到了同样的问题,但这解决了我的问题:

node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod

X = (2048 or 4096 or 8192 o..)内存的价值在哪里。

于 2019-04-06T09:55:12.340 回答
56

只需在终端中输入:

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

当您超过 Node.js 允许的默认最大内存时会发生错误。所有这一切都是增加允许的最大内存。

于 2020-11-05T23:34:41.813 回答
47

ng build在 Visual Studio Code 中执行命令时出现同样的错误。但是当我按以下顺序在 Windows 命令行上执行相同的操作时,我可以成功构建。

步骤1。

set NODE_OPTIONS=--max_old_space_size=4096

第2步。

ng build
于 2020-03-02T08:58:14.050 回答
37

试试论坛上一条旧消息中指出的解决方案:3.7.0: iOS build with --prod not working

打开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。

于 2018-11-16T18:12:39.760 回答
15

就我而言,这是一个递归导致 React 耗尽了所有内存。

这发生在我重构代码并且没有注意到这一点时。

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

在其他 Node.js 应用程序中,这可能如下所示:

const someFunction = () => {
  ...
  someFunction();
  ...
}
于 2020-03-15T23:01:34.140 回答
15

视窗

从控制面板转到系统高级系统设置环境变量新建(用户或系统)

mceclip0.png

或者这可以在 PowerShell 中通过以下方式完成:

$env:NODE_OPTIONS="--max-old-space-size=8192"

如有必要,您也可以增加此数字。我们已经看到人们需要为一些较大的项目将其增加到 14 GB!

Linux/macOS

export NODE_OPTIONS=--max-old-space-size=8192
于 2021-10-02T14:13:00.150 回答
13

从 Node.js 12 更新到 Node.js 14 为我解决了这个问题。


立即更新
Node.js 16 可用,我建议更新到可用的最新 Node.js 版本。

于 2020-11-12T12:39:39.273 回答
13

在 Visual Studio Code 中执行以下语句时,我收到了相同的错误消息。但是当我在 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
于 2019-11-19T02:47:00.417 回答
9

由于某些原因,以前的所有答案都对我不起作用。我做了以下事情来解决我的问题:

  1. 我必须先删除node_modules文件夹
  2. 在我的电脑上重新安装 Node.js 并
  3. 然后npm install
于 2020-01-14T11:37:55.200 回答
8
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true
于 2019-06-16T12:38:28.377 回答
7

添加参数--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

角度构建文档

于 2020-04-23T12:50:52.907 回答
6

换行

"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 等

于 2020-02-06T07:11:07.307 回答
5

对我来说,我有一个语法错误(没有出现)并导致了这个错误。

于 2020-11-21T17:58:26.730 回答
5

在您的项目文件夹中运行此命令。使用服务而不是构建

node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve  --prod --port=4202
于 2019-10-03T10:18:10.830 回答
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
于 2021-03-12T16:33:29.607 回答
5

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

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

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

并运行项目这个命令:

npm run serve
于 2021-06-08T07:16:08.217 回答
4

对我来说,这是一个 Firebase 包的问题。

仅为您的package.json文件添加 "@firebase/database": "0.2.1" 。重新安装node_modules并且它可以工作。

于 2019-04-15T07:24:02.357 回答
2

请检查您的 Node.js 版本:

   node -v

如果它是 10.1.1 的东西,那么您需要通过以下命令更新您的根级别 Node.js 版本:

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 美元。

对于 Ionic 用户,请在您的 package.json 中添加以下代码

对于离子用户

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

于 2020-06-25T14:35:46.920 回答
2

只需运行以下命令:

export NODE_OPTIONS="--max-old-space-size=8192"
于 2021-03-08T23:30:58.900 回答
2

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

正如 Emmanuel 所提到的,它似乎来自 Node.js v10 与 Node.js v12 处理内存的方式不同。

我试图增加内存无济于事。但是使用 Node.js v12 做到了。

检查如何按照 Richard 的解释nvm use $VERSION_NODE_12添加到构建设置

frontend:
  phases:
    preBuild:
      commands:
        - nvm use $VERSION_NODE_12
        - npm ci
    build:
      commands:
        - nvm use $VERSION_NODE_12
        - node -v
        - npm run-script build
于 2020-07-16T05:43:38.317 回答
2

对我来说,问题是有一个额外的node_modules文件夹,我将其重命名为node_modules_old并运行 annpm install以生成新的node_modules. 不知何故,构建必须仍在拾取node_modules_old文件夹,所以我移出node_modules_old目录以解决问题。

于 2020-05-18T21:05:02.587 回答
2

对于那些从 Google 提出这个问题并希望在您的Dockerfile(替换6144为您要分配的以兆字节为单位的内存量)中解决此问题的人的非 Angular 通用 JavaScript 答案。

我的实现在 Node.js v14.1.0 中工作,由 Docker 版本 20.10.5 执行,使用气流 v2.0.1 构建DockerOperator55c4c88

FROM node:14.1.0

# Create app directory
WORKDIR /tmp/dockerspace/

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
COPY package*.json ./

RUN npm install

# Bundle app source
COPY . .

CMD node --max-old-space-size=6144 app.js
于 2021-05-26T10:31:33.380 回答
2

我删除了现有的 Node.js 模块并运行以下命令来解决我的问题:

npm install -all
npm audit fix
于 2019-12-09T13:59:45.577 回答
1

运行此命令:

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

于 2021-12-05T05:05:35.100 回答
1
  1. export NODE_OPTIONS="--max-old-space-size=6144" #它将增加到6gb。

--------如果未解决,请尝试第二步------------- 2)只需将您的节点版本更新到最新版本即可解决此问题。

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

于 2022-01-18T11:29:39.483 回答
1

如果您是在 Windows 上开发并在发布时遇到此问题,请通过官方站点升级 Node.js。

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

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

于 2021-06-02T16:29:55.940 回答
0

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

于 2020-02-28T23:25:30.747 回答
0

for ...在我的情况下,错误是由于循环中的条件使用不当引起的。代替:

for (let t = startNo; t <= endNo; t++) {}

我有:

for (let t = startNo; endNo; t++) {}
于 2021-09-22T15:10:11.370 回答
0

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

于 2020-01-21T22:58:03.967 回答
0

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

在我这边,我的package.json. 项目 A 依赖于项目 B,而项目 B 又依赖于项目 A。

于 2020-08-19T11:42:34.937 回答
0

检查您的文件夹名称。如果您的文件夹名称中有空格,则会产生此类问题。重命名不带空格。

于 2019-11-28T10:12:53.117 回答
0

当我运行 angular 'ng serve' 时,我遇到了类似的问题:

“致命错误:堆限制附近的无效标记压缩分配失败 - JavaScript 堆内存不足”

就我而言,我发现我的 Angular 应用程序使用了延迟加载。一个模块已经被导入到它自己的路由模块中,但是有人也将它导入到应用程序模块中,这导致了递归(?)加载。

这会导致内存不足。

于 2021-03-04T21:30:17.150 回答
0

我正在使用 Node.js v-14.17 的最新稳定版本。我在新的 Angular Ionic 项目中遇到了同样的问题,并且尝试了大多数以前的答案,但没有成功。

最后在升级到 Node.js 16.4.2 LTS 后,它修复了这个问题。

于 2021-08-13T21:25:03.600 回答
0

对我来说,在我的 React 项目中运行ESLintPrettier修复和使用目录格式化时遇到了这个问题。build删除它后,一切正常。

我猜这是因为文件太多。

于 2020-08-11T13:38:23.273 回答
0

在安装 aws-sdk 之后,我遇到了同样的问题,而不是内存空间。我解决了将导入更改为要求的问题,如下所示:

部署后节点应用程序中的 aws-sdk 无法启动

于 2022-01-18T01:12:37.720 回答
0

在我为我的项目更新了 Node.js、TypeScript、Yarn、npm 等所有库后,这个问题就消失了。

于 2020-10-19T07:51:35.533 回答
0

#!/usr/bin/env node --max-old-space-size=4096ionic-app-scripts.js文件中不起作用。

通过添加修改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;=;%
  node --max_old_space_size=4096  "%~dp0\..\@ionic\app-scripts\bin\ionic-app-scripts.js" %*
)

终于奏效了。

于 2020-07-04T08:37:06.160 回答
-10

有时简单是成功的关键。while (i <= 10000) {}在不增加代码的情况下进行搜索i;)

于 2020-10-06T04:27:48.007 回答