Gulp - CALL_AND_RETRY_LAST分配失败 - 处理内存不足

时间:2016-05-17 10:03:39

标签: node.js gulp

在致电我的一项任务时,我得到" FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory"。

我在this question中发现我可以将参数传递给节点以增加默认内存限制:node --max-old-space-size=2000 server.js。但是如何告诉gulp将参数传递给node.exe?这是the list of flags我可以传递给gulp,我希望找到一个gulp在为某个任务启动它时传递给节点。

导致问题的任务:

var gulp = require('gulp');
var imagemin = require('gulp-imagemin');

gulp.task('imagemin', function() {
  var OUTPUT_FOLDER = '../Release_Prepared/';
  var extensionsToOptimize = ['gif', 'jpeg', 'jpg', 'png', 'svg'];
  var glob = [];

  for(var i=0; extensionsToOptimize.length; i++){
    glob.push(OUTPUT_FOLDER + '**/*.' + extensionsToOptimize[i]);
  }

  gulp.src(glob)
  .pipe(imagemin({
    verbose: true
  }))
  .pipe(gulp.dest(OUTPUT_FOLDER));
});

7 个答案:

答案 0 :(得分:22)

我今天刚刚发现gulp可以被赋予任何V8选项,它将被传递给节点。例如,执行gulp yourTask --max_old_space_size=2000,它会为您提供所需的结果。要查看要传递的V8标记列表,请在终端中键入node --v8-options

答案 1 :(得分:6)

在我们的情况下,第一次在我执行gulp build命令时很好。我有四个单独的任务。每个任务为每个模块创建单独的构建文件。我们一直在为最终版本运行Gulp命令。

我们不断遇到process out of memory问题。即使我们为流程分配了大量内存。如下所示 - 大约8GB。但是,它仍然失败了。

gulp --max-old-space-size=8192

<强>解决方案:

  
      
  1. 只需删除已创建的以前构建的文件。而且   上面的命令创建新文件。因此,该流程可以无缝运行。
  2.   

例如: 手动/通过自动化命令删除main-built.js

  
      
  1. 在其他情况下,只需执行以下命令清除缓存。
  2.   

npm cache clean

  
      
  1. 由于我们有大量的JS文件。这也是另一种情况,   它可能会导致这种问题。删除不需要的和未使用的Js   文件。
  2.   

希望这有帮助。

答案 2 :(得分:1)

我能够通过手动删除我构建的js / css(dest)文件来解决这个问题,然后重新运行gulp任务。这与上面的RJK答案一致,但不必分配新内存。

答案 3 :(得分:0)

我相信你应该在启动bash脚本构建时运行这种命令

play.exceptions.CompilationException: DeleteByQueryPlugin cannot be resolved to a type
        at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:246)
        at org.eclipse.jdt.internal.compiler.Compiler.handleInternalException(Compiler.java:676)
        at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:520)
        at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:282)
        at play.classloading.ApplicationClasses$ApplicationClass.compile(ApplicationClasses.java:281)
        at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:166)
        at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:84)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at play.plugins.PluginCollection.loadPlugins(PluginCollection.java:168)
        at play.Play.init(Play.java:303)
        at play.server.Server.main(Server.java:162)
Exception in thread "main" java.lang.NoSuchFieldError: FRAMELESS_COMPILE_ENABLED
        at play.modules.sass.Engine.<init>(Engine.java:44)
        at play.modules.sass.Plugin.onLoad(Plugin.java:15)
        at play.plugins.PluginCollection.initializePlugin(PluginCollection.java:251)
        at play.plugins.PluginCollection.loadPlugins(PluginCollection.java:185)
        at play.Play.init(Play.java:303)
        at play.server.Server.main(Server.java:162)

答案 4 :(得分:0)

搜索gulp.cmd并修改该文件:

@IF EXIST&#34;%~dp0 \ node.exe&#34; (   &#34;%〜DP0 \ node.exe&#34; &#34;%~dp0 \ node_modules \ gulp-cli \ bin \ gulp.js --max-old-space-size = 1400&#34; %* )ELSE(   @SETLOCAL   @SET PATHEXT =%PATHEXT:;。JS; =;%   node&#34;%~dp0 \ node_modules \ gulp-cli \ bin \ gulp.js --max-old-space-size = 1400&#34; %* )

答案 5 :(得分:0)

给我更多未解决的记忆。发生了什么:

我在这个问题上失去了一些日子,直到我发现在某个文件中我从一个静态文件导入一个类,一个构建文件。它使构建过程永无止境。类似的东西:

import PropTypes from "../static/build/prop-types"; 

修复真正的源码解决了所有问题。

答案 6 :(得分:0)

我有一个简单的项目,最终使用gulp-imagemin,并遇到了同样的问题。根本问题是拥有大量营销图像,而Gulp / Node只是内存不足。

我当然可以在这里执行接受的答案。但是这些4000多像素的3000多像素图像无论如何都没有在网络上运行,而这个错误实际上只是提醒我,我错过了重新调整一些图像的大小。

因此,如果您收到类似的错误,请检查您是否有适当大小的图像,因为gulp / node不应该阻塞大多数正常大小的版本。