我正在尝试构建我的流星应用程序并且不断遇到以下错误。这不是我第一次构建应用程序,一切正常,直到昨天构建。我已经尝试过了:正如[SO SO] [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)
答案 0 :(得分:4)
同样的问题让我疯狂,但我终于设法在流星1.4.3.1下解决了它。
背景:
问题在于meteor调用节点进行构建。当它运行时,节点为其运行的V8引擎分配一定量的内存。在较大的项目中,为V8分配的默认内存不足以跟踪所有内容 - 它在接近极限时尝试进行垃圾收集,但最终耗尽空间并因显示的错误而崩溃。
如果我们只是直接运行节点,我们可以使用--max-old-space-size选项运行它,这将允许我们设置V8引擎的最大内存。问题是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 ...选项实际上正在阅读,尝试将其改为乱码 - 它应该导致流星抛出错误)
答案 1 :(得分:0)
你需要注意那个初始警告:
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
阅读它所说的内容 - 基本上它将生成文件,然后再编译它们。难怪它陷入困境并耗尽内存。将构建放在一个不同的目录中(不在Meteor项目中),它应该更加快乐:)