【问题标题】:How to increase Javascript heap size for Ionic如何增加 Ionic 的 Javascript 堆大小
【发布时间】:2018-02-25 07:27:11
【问题描述】:

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

正如this 答案中所建议的那样,我试图在构建命令之前利用package.json start 脚本中的max_old_space_size 标志无济于事。主要是因为node进程在flag设置后是通过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

【问题讨论】:

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


【解决方案1】:

唯一的解决方案是在 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 的内存密集型进程。

【讨论】:

  • --max_old_space_size=12288,“12288”是干什么用的?我试试这个,但仍然错误
  • 12288 是我分配给 Ionic 的 PC 上的 RAM 大小(以 MB 为单位)——即 12GB。您的取决于您机器中的 RAM 量 - 例如如果您有 8GB 的​​ RAM,您可以将任意数量的 less than or equal to 1024 * 8 分配给标志。
  • 有 Ubuntu/Linux/MAC 的解决方案吗??
  • 如果您使用的是nvm,请在bin 目录中搜索ionic.cmd 的任何等效文件。
  • github 上的一个线程上的用户通过在 npm 的别名上设置标志来建议类似以下内容:alias npm='node --max_old_space_size=8000 /usr/bin/npm'github.com/npm/npm/issues/12238
【解决方案2】:

我将此标记为重复,但如果有人在合并之前遇到它,我在https://stackoverflow.com/a/48895989/4200039 上发布了这个问题的现代解决方案:

从 2017 年 8 月发布的 v8.0 开始,NODE_OPTIONS 环境变量公开了此配置(请参阅 NODE_OPTIONS 已登陆 8.x!)。根据文章,仅允许在源中列入白名单的选项,其中包括“--max_old_space_size”。

所以我输入了我的 .bashrc: 导出 NODE_OPTIONS=--max_old_space_size=4096

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 2012-09-26
    • 2013-12-24
    • 2011-09-29
    相关资源
    最近更新 更多