在致电我的一项任务时,我得到" 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));
});
答案 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
<强>解决方案:强>
- 只需删除已创建的以前构建的文件。而且 上面的命令创建新文件。因此,该流程可以无缝运行。
醇>
例如:
手动/通过自动化命令删除main-built.js
。
- 在其他情况下,只需执行以下命令清除缓存。
醇>
npm cache clean
- 由于我们有大量的JS文件。这也是另一种情况, 它可能会导致这种问题。删除不需要的和未使用的Js 文件。
醇>
希望这有帮助。
答案 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不应该阻塞大多数正常大小的版本。