Node.js event-stream:setMaxListeners的位置?

时间:2014-02-11 17:49:13

标签: javascript node.js eventemitter gulp event-stream

我搜索并搜索了这个,但无济于事。我已经梳理了网络(包括Stackoverflow)和Node文档以获得答案,而没有找到一个---有效(可能这只是我的搜索不好)。我正在使用gulp配置文件中的事件流,我有一个特殊的任务是从EventEmitter类中遇到经典的“检测到内存泄漏”错误。从我发现的,处理这个问题的答案似乎是调用EventEmitter类的setMaxListeners方法;我的研究表明,事件流有一个Stream对象,它应该是EventEmitter的一个实例。但是,无论如何我尝试调用setMaxListeners,我找不到方法。在我自己研究这个问题后,我想我会把它带到Node大师这里(我假设这很简单,我只是缺少一些东西)。这是我的代码:

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/'));

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

相关commit中的更多内容。

答案 1 :(得分: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。