如何为Ionic增加Javascript堆大小

3

我在运行一个使用--release--prod标志的Ionic应用程序时遇到了内存不足问题。不幸的是,似乎Node允许使用的内存空间对于该进程来说不足,因此在没有可用的内存块执行操作后会产生以下错误:

enter image description here

答案中建议的那样,在构建命令之前,我尝试利用package.json start脚本中的max_old_space_size标志,但无济于事。主要是因为Ionic CLI在设置标志之后以内部方式运行节点进程。

我还尝试按照答案中建议的方法重新安装具有更大堆大小的Ionic,但这似乎只解决了Ionic包本身安装期间的内存限制,并未解决通过CLI使用Ionic进行的任何后续操作的内存问题。

非常感谢您的帮助。 :)

Ionic信息:

cli packages: (D:\ionic\<...>\node_modules)

@ionic/cli-utils  : 1.9.2
ionic (Ionic CLI) : 3.9.2

global packages:

Cordova CLI : 7.0.1
Gulp CLI    : CLI version 3.9.1 Local version 3.9.1

local packages:

@ionic/app-scripts : 2.1.4
Cordova Platforms  : android 6.2.3 ios 4.5.0
Ionic Framework    : ionic-angular 3.3.0

System:

Android SDK Tools : 25.2.2
Node              : v6.10.2
npm               : 4.0.5
OS                : Windows 7

2个回答

3
唯一的解决方案是在Ionic CLI启动进程时,从Ionic的角度内部增加Javascript堆内存大小。@timothybclayton在ionic-app-scripts下发表的类似问题的Github帖子 帮助我搞清楚了这一点。但是,由于我使用的是NodeJS的软件包管理器Nodist,所以我必须以与该文章不同的方式进行操作。因此,我必须进入Nodist安装目录下的/bin文件夹并调整ionic.cmd文件。现在,ionic.cmd文件看起来允许NodeJS执行过程中有足够的内存:
@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe" --max_old_space_size=12288 "%~dp0\node_modules\ionic\bin\ionic" %*
) ELSE (
  @SETLOCAL
  @SET PATHEXT=%PATHEXT:;.JS;=;%
  node --max_old_space_size=12288 "%~dp0\node_modules\ionic\bin\ionic" %*
)

希望这能帮助到其他遇到类似问题的人,不仅限于Ionic,还包括任何使用NodeJS的内存密集型进程。

--max_old_space_size=12288,"12288" 是什么意思?我尝试了这个设置,但仍然出现错误。 - Reynald Henryleo
我的电脑上分配给Ionic的RAM大小为12288MB,即12GB。你的RAM大小取决于你的机器 - 例如,如果你有8GB的RAM,你可以将任何小于或等于1024 * 8的数量分配给该标志。 - Ahmad Baktash Hayeri
在Ubuntu/Linux/MAC上有什么解决方案吗? - Ankit Maheshwari
如果您正在使用 nvm,请在 bin 目录中搜索任何等效文件以获取 ionic.cmd - Ahmad Baktash Hayeri
在 Github 上的一个线程上,一位用户建议通过为 npm 的别名设置标志来实现以下操作:alias npm='node --max_old_space_size=8000 /usr/bin/npm'。 https://github.com/npm/npm/issues/12238 - Ahmad Baktash Hayeri

0

我将其标记为重复,但如果有人在合并之前偶然遇到它,我已经在https://dev59.com/dF8e5IYBdhLWcg3wF3SV#48895989上发布了这个问题的现代解决方案:

截至2017年8月发布的v8.0版本,NODE_OPTIONS环境变量公开了此配置(请参见NODE_OPTIONS已在8.x中推出!)。根据文章,只允许源代码中列入白名单的选项,其中包括“--max_old_space_size”。

所以我在我的.bashrc文件中加入了以下内容: export NODE_OPTIONS=--max_old_space_size=4096


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