如何为Ionic

时间:2017-09-16 06:28:31

标签: node.js build out-of-memory ionic3 heap-memory

运行带有--release--prod标志的Ionic应用程序构建时出现内存不足问题。不幸的是,当它接缝时,允许Node使用的内存空间不足以进行该过程并且它产生以下错误(可能在没有可用于执行操作的内存块之后):

enter image description here

正如this回答中所建议的,我尝试在构建命令之前利用max_old_space_size package.json脚本中的start标志无效。主要是因为节点进程在设置标志后由Ionic CLI方式内部运行。

我还尝试按照this回答中的建议重新安装具有更大堆大小的Ionic,但这似乎只解决了Ionic软件包本身安装过程中的内存限制,以及不通过CLI使用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 个答案:

答案 0 :(得分:3)

唯一的解决方案是在Ionic CLI启动过程时,在内部增加Javascript堆的内存大小(从Ionic的角度来看 )。

post on Github by @timothybclayton on a similar issue under ionic-app-scripts帮助我解决了这个问题。

但是,我必须以完全不同的方式完成它,因为我有 Nodist 作为NodeJS的包管理器。所以,我必须转到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的内存密集型进程。

答案 1 :(得分:0)

我将此标记为重复,但如果在合并之前发生任何事情,我会在https://stackoverflow.com/a/48895989/4200039发布现代解决方案:

  

自2017年8月发布的v8.0起,NODE_OPTIONS环境变量公开此配置(请参阅NODE_OPTIONS已落在8.x!中)。根据文章,只允许在源中列入白名单的选项,其中包括&#34; - max_old_space_size&#34;。

     

所以我放入了我的.bashrc:   export NODE_OPTIONS = - max_old_space_size = 4096