1

我已经搜索并搜索了这个,但无济于事。我已经梳理了网络(包括 Stackoverflow)和 Node 文档以寻求答案,但没有找到一个可行的答案(也许这对我来说只是不好的搜索)。我正在处理 gulp 配置文件中的事件流,并且我有一个特定的任务正在从 EventEmitter 类中遇到经典的“检测到内存泄漏”错误。根据我的发现,处理这个问题的答案似乎是调用 EventEmitter 类的 setMaxListeners 方法;我的研究表明事件流有一个 Stream 对象,它应该是 EventEmitter 的一个实例。但是,无论我尝试调用 setMaxListeners 的方式,我都找不到方法。在筋疲力尽地研究这个问题之后,我想我会把它带到这里的节点专家那里(我' 我假设这很简单,我只是错过了一些东西)。这是我的代码:

return eventStream.merge(
        gulp.src('./jscript/libs/file-one.js'),
        gulp.src('./jscript/libs/filder_one/file-two.js'),
        gulp.src('./jscript/libs/folder_two/file-three.js'),
        gulp.src('./jscript/libs/folder_three/file_four.js'),
        gulp.src('./jscript/libs/folder_four/file_five.js'),
        gulp.src('./jscript/libs/folder_five/file_six.js'), 
        gulp.src('./jscript/libs/file_seven.js'),
        gulp.src('./jscript/libs/file_eight.js'),
        gulp.src('./jscript/lists/rules/*.js')
    )        
    .pipe(concat('my_file.js'))
    .pipe(gulp.dest('./jscript/dist/'))
    .pipe(rename('my_file.min.js'))
    .pipe(uglify())
    .pipe(gulp.dest('./jscript/dist/'));

谢谢!

4

2 回答 2

3

在 Node.js 0.12(即将发布)中,您将能够为所有发射器设置最大值:

var events = require('events');
events.EventEmitter.defaultMaxListeners = 100;

更多在相关的commit中。

于 2014-02-11T23:00:09.523 回答
0

这不是您问题的直接答案,但您可以将一组 glob 模式传递给“gulp.src()”,而不是合并多个“gulp.src()”。它不能解决你的问题吗?

https://github.com/gulpjs/gulp/blob/master/docs/API.md#gulpsrcglobs-options

编辑

作为直接答案,以下内容对我有用:

var merged = eventStream.merge(...);
merged.setMaxListeners(0);
return merged.pipe(...);

虽然在合并函数中添加了事件侦听器,但似乎在事件循环的滴答之间检查了侦听器计数。所以我们可以在添加监听器后立即设置MaxListeners。

于 2014-02-12T01:39:20.877 回答