我正在尝试构建我的流星应用程序,并且不断遇到以下错误。这不是我第一次构建该应用程序,直到昨天的构建为止一切正常。我已经尝试过:正如[this SO post][1]中的一个答案中所建议的,但它没有帮助。
#!/usr/bin/env node --max_old_space_size=4096 --optimize_for_size --max_executable_size=4096 --stack_size=4096
控制台输出:
meteor build .
WARNING: The output directory is under your source tree.
Your generated files may get interpreted as source code!
Consider building into a different directory instead
meteor build ../output
Minifying app code \
<--- Last few GCs --->
103230 ms: Mark-sweep 1385.5 (1455.5) -> 1387.9 (1455.5) MB, 898.4 / 0 ms [allocation failure] [GC in old space requested].
104206 ms: Mark-sweep 1387.9 (1455.5) -> 1387.9 (1455.5) MB, 975.8 / 0 ms [allocation failure] [GC in old space requested].
105196 ms: Mark-sweep 1387.9 (1455.5) -> 1384.1 (1455.5) MB, 990.2 / 0 ms [last resort gc].
106101 ms: Mark-sweep 1384.1 (1455.5) -> 1385.1 (1455.5) MB, 905.3 / 0 ms [last resort gc].
<--- JS stacktrace --->
==== JS stack trace =========================================
Security context: 0x249f6fdb4629 <JS Object>
1: /* anonymous */(aka /* anonymous */) [0x249f6fd041b9 <undefined>:~4943] [pc=0xcd10dd2f48c] (this=0x249f6fd041b9 <undefined>,self=0x1400b413881 <an AST_ObjectKeyVal with map 0xc3d3a4651b9>,output=0x17417c4edd79 <an Object with map 0x16588927e021>)
2: doit(aka doit) [0x249f6fd041b9 <undefined>:4190] [pc=0xcd10d7a3298] (this=0x249f6fd041b9 <undefined>)
3: print [0x249f6fd041b9 <unde...
FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
Aborted (core dumped)
同样的问题让我抓狂,但我终于在 Meteor 1.4.3.1 下成功解决了它。
背景:
问题是meteor调用node来构建。当它运行时,节点会为其运行的V8引擎分配一定量的内存。在较大的项目中,为 V8 分配的默认内存不足以跟踪所有内容 - 它尝试在接近限制时进行垃圾收集,但最终会耗尽空间并崩溃并显示错误。
如果我们只是直接运行节点,我们可以使用 --max-old-space-size 选项来运行它,这将允许我们设置 V8 引擎的最大内存。问题是,meteor 在它自己的上下文中并使用它自己的选项调用节点,所以我们不能直接将标志添加到我们的meteor调用中。
解决方案:
看起来,meteor 1.4.3.1(也许还有其他)在调用节点时将传递 TOOL_NODE_FLAGS 环境变量中指定的标志和选项(其他人提到过 NODE_OPTIONS,但它不适用于我的流星版本 - 标志只是得到掉落)
因此,如果您想将节点引擎的最大内存增加到4 GB,请添加环境变量
TOOL_NODE_FLAGS="--max-old-space-size=4096"
到您正在运行的meteor的上下文 - 该选项应该传递到节点调用。
(如果您不知道在哪里设置环境变量 - 它通常位于您的 IDE 构建配置或构建脚本中。如果您想健全性检查 --max-old... 选项是否确实被读取,尝试将其更改为乱码 - 它应该会导致流星抛出错误)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)