![](/img/trans.png)
[英]Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory Ionic 3 prod build
[英]FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory in Ionic 3
对于那些从谷歌登陆这个问题的人的非角度一般答案:
每次遇到此错误时,可能是因为内存泄漏或 Node <= 10 和 Node > 10 管理内存的方式不同。 通常只是增加分配给 Node 的内存将允许您的程序运行,但实际上可能无法解决真正的问题,并且节点进程使用的内存仍然可能超过您分配的新内存。 我建议在节点进程开始运行或更新到节点 > 10 时分析它的内存使用情况。
我有内存泄漏。 这是一篇关于在 node.js 中调试内存泄漏的好文章。
也就是说,要增加内存,请在运行 Node 进程的终端中:
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 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.
就我而言,我通过安装 Node.js 版本 12.10.0 解决了这个问题。
我在CentOS服务器 7 上遇到了同样的问题,但这解决了我的问题:
node --max-old-space-size=X node_modules/@angular/cli/bin/ng build --prod
其中X = (2048 or 4096 or 8192 o..)
是内存的值。
只需在终端中输入:
export NODE_OPTIONS="--max-old-space-size=8192"
当您超过 Node.js 允许的默认最大内存时,就会发生错误。 所有这些都是增加允许的最大内存。
尝试在论坛上的旧消息中指出的此解决方案: 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。
我在 Visual Studio 代码中执行ng build
命令时遇到了同样的错误。 但是当我按以下顺序在 Windows 命令行中执行相同的操作时,我可以成功构建。
第1步。
set NODE_OPTIONS=--max_old_space_size=4096
第2步。
ng build
我在 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
在我的情况下,这是导致反应耗尽所有内存的递归。
这发生在我重构我的代码并且没有注意到这一点时。
const SumComponent = () => {
return (
<>
<SumComponent />
</>
)
}
在其他节点应用程序中,这可能如下所示:
const someFunction = () => {
...
someFunction();
...
}
从 Node.js 12 更新到 Node.js 14 为我解决了这个问题。
更新
现在 Node.js 16 可用,我建议更新到 Node.js 的最新可用版本。
由于某些原因,上面的所有答案对我都不起作用,我做了以下工作来解决我的问题:
node_modules
文件夹npm install
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=true
node --max_old_space_size=4096 ./node_modules/@angular/cli/bin/ng build --prod --build-optimizer
添加参数--build-optimizer
解决了我的问题。
更新:
我不知道为什么只添加 --build-optimizer 解决了这个问题,但根据角度文档,它应该在启用 aot 的情况下使用,所以更新的命令应该如下所示
--build-optimizer=true --aot=true
更换线路
"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"
笔记:
端口--4300 不是常数取决于您选择的端口。
--max_old_space_size=5096 太不恒定; 任何值 1024,2048,4096 等
在您的项目文件夹中运行此命令。 使用服务而不是构建
node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve --prod --port=4202
我没有使用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
我在 Angular 上遇到了同样的问题。 然后我写了
"serve": "node --max_old_space_size=8192 ./node_modules/@angular/cli/bin/ng serve"
这个脚本到package.json
脚本,对我来说这个问题解决了。
并运行项目这个命令:
npm run serve
对我来说,这是 Firebase 软件包的问题。
只为package.json文件添加 "@firebase/database": "0.2.1"。 重新安装node_modules就可以了。
我删除了现有的节点模块并运行以下命令来解决我的问题
npm install -all
npm audit fix
对我来说,我有一个语法错误(没有出现)并导致了这个错误。
请检查您的节点版本:
$ 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 美元
对于 ionic 用户,请在 package.json 中添加以下代码
"ionic:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
另一个非角度答案(我在 AWS Amplify 上构建 React 应用程序时遇到了同样的问题)。
正如 Emmanuel 所提到的,它似乎来自节点 v10 与节点 v12 处理内存方式的不同。
我试图增加内存但无济于事。 但是使用 node v12 做到了。
检查如何将nvm use $VERSION_NODE_12
添加到您的构建设置中,如richard所述
frontend: phases: preBuild: commands: - nvm use $VERSION_NODE_12 - npm ci build: commands: - nvm use $VERSION_NODE_12 - node -v - npm run-script build
只需运行此命令:
export NODE_OPTIONS="--max-old-space-size=8192"
对于那些从谷歌登陆这个问题并希望在你的Dockerfile
修复这个问题的非 Angular 通用 JavaScript 答案(用你想要分配的内存量(以兆字节为单位)替换6144
)。
我的实现是在 Node.js v14.1.0 中工作,由 Docker 版本 20.10.5 执行,使用DockerOperator
在气流 v2.0.1 中构建 55c4c88)。
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
对我来说,问题是有一个额外的node_modules
文件夹,我将其重命名为node_modules_old
并运行npm install
以生成新的node_modules
。 不知何故,构建必须仍在选择node_modules_old
文件夹,所以我将node_modules_old
移出目录以解决问题。
如果您在 Windows 上开发并在发布时遇到此问题,请通过官方站点升级 Node.js: https : //nodejs.org/en/download/
内存使用处理确实随着 Node 的每个新版本而增加,尽管我没有找到增加的确切数字。
那是唯一对我有用的解决方案。 我花了整整一个周末甚至更多时间来解决这个问题。
检查您的文件夹名称。 如果您的文件夹名称有空格,则会产生此类问题。 重命名不带空格。 希望它会起作用。
如果在 VSCode 上运行 React 应用程序时发生这种情况,请检查您的 propTypes,未定义的 Proptypes 会导致相同的问题。
对我来说,我收到此错误是因为我无法访问 angular.json 文件中设置的 dist 文件夹的输出路径。 在我使用更新的凭据重新连接到远程路径后,错误消失了。
#!/usr/bin/env node --max-old-space-size=4096 in the ionic-app-scripts.js dint work
修改
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" %* )
辛苦了
对我来说,在我的 React 项目中运行 eslint 和 prettier fix 并使用build
目录进行格式化时,我遇到了这个问题,删除它后一切正常。 我猜这是因为文件太多。
我正在使用 Node v-14.17 的最新稳定版本。 我在使用新的 Angular Ionic Projects 时遇到了同样的问题,并尝试了上面的大部分答案但没有成功。
最后升级到 16.4.2 LTS 后修复了这个问题。
在我的情况下,错误是由于在for ...
循环中不正确使用条件引起的。 代替:
for (let t = startNo; t <= endNo; t++) {}
我有:
for (let t = startNo; endNo; t++) {}
运行此命令:
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
在安装 aws-sdk 之后,我遇到了同样的问题,而不是内存空间。 我解决了将导入更改为要求的问题,如下所示:
--------如果未解决,请尝试第二步------------- 2)只需将您的节点版本更新到最新版本即可解决此问题。
--------如果未解决,请尝试第三步---------------- 3)只需在 Windows 终端中运行此命令。 set NODE_OPTIONS=--max_old_space_size=4096
解决了!!! (对于 Angular)经过数小时尝试解决此问题后,我终于确定,尽管尝试增加max_old_space_size
,但仍然出现该错误的原因是因为我在 64 位计算机上安装了 x86(32 位)版本的 Node.js。
看到这个后,我:
C:\\ProgramData\\chocolatey\\bin
删除chocolatey
node.js
上的x86 (32bit)
版本C:\\Users\\%username%\\AppData\\Roaming
中删除了npm
和npm cache
文件夹x64
版本的node
npm install -g @angular/cli
对我来说,这就像模块导入本身一样愚蠢:
// worker.js
import { worker } from './worker'
如果这对某人有用。 确保我们的 Sass 中没有递归。 或您最近添加的代码中的非退出递归。 在某些情况下,超出最大堆就是一个标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.