当我使用“ ionic serve”命令运行ionic 3项目时,出现此错误:
Answers:
对于那些从Google着手解决此问题的人,可以使用非角度的一般性答案:
每次遇到此错误,都可能是由于内存泄漏或Node <= 10和Node> 10管理内存的方式之间的差异。通常,仅增加分配给Node的内存将允许您的程序运行,但可能无法真正解决实际问题,并且Node进程使用的内存仍可能超过您分配的新内存。我建议您在节点进程开始运行或更新到节点> 10时对其内存使用情况进行性能分析。
我发生了内存泄漏。这是一篇有关调试节点中内存泄漏的出色文章。
也就是说,要增加内存,请在运行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.
next.js
开始使用快速刷新功能使我们的应用崩溃。
就我而言,请修复安装NodeJs 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..)
记忆的价值在哪里
ng serve
的大量.js文件需要加载到内存中。scripts
angular.json
尝试在论坛上的旧消息中指出的解决方案: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。
我ng build
在Visual Studio代码中执行命令时遇到了相同的错误。但是当我按以下顺序在Windows命令行中执行相同的操作时,我可以成功构建。
第1步。
set NODE_OPTIONS=--max_old_space_size=4096
第2步。
ng build
node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng build --baseHref=/baseUrl/ --prod=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等
在我的情况下,这是递归导致反应耗尽所有内存。
这是在我重构代码时没有注意到的。
const SumComponent = () => {
return (
<>
<SumComponent />
</>
)
}
在其他节点应用程序中,它可能类似于:
const someFunction = () => {
...
someFunction();
...
}
SumComponent
包含一个SumComponent
(其中包含一个SumComponent
包含一个SumComponent
...)
节点--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
在您的项目文件夹中运行此命令。使用服务而不是构建
node --max_old_space_size=8000 node_modules/@angular/cli/bin/ng serve --prod --port=4202
请检查您的节点版本:
$ 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:build": "node --max-old-space-size=16384 ./node_modules/@ionic/app-scripts/bin/ionic-app-scripts.js build",
app-scripts
,则此方法有效,但是如果您构建android或类似脚本的ionic cordova build android
方式呢?
另一个非角度的答案(我在使用AWS Amplify构建React应用程序时遇到了同样的问题)。
如伊曼纽尔(Emmanuel)所述,这似乎是由于节点v10与节点v12处理内存的方式不同而引起的。
我试图增加内存,但无济于事。但是使用节点v12做到了。
检查如何nvm use $VERSION_NODE_12
按照@atlesp的说明将其添加到构建设置中https://github.com/aws-amplify/amplify-console/issues/440#issuecomment-602626451
如果在VSCode上运行React应用程序时发生这种情况,请检查您的propTypes,未定义的Proptypes会导致相同的问题。
#!/ usr / bin / env节点-ionic-app-scripts.js中的max-old-space-size = 4096
修改中
node_modules / .bin / ionic-app-scripts.cmd
通过增加:
@IF存在“%〜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”%*)
辛勤工作
有时候,简单是成功的关键。搜索while (i <= 10000) {}
而不增加i
代码;)
在为我的项目更新了所有库(如nodejs,typescript,yarn,npm等)后,此问题消失了。