如何在组合NodeJS Streams时调用`setMaxListeners`

时间:2014-03-22 02:10:38

标签: node.js gulp eventemitter

我使用gulpjs捆绑css文件集。每个集都捆绑到自己的文件中,所以我的代码看起来像:

var es = require('event-stream');

gulp.task("bundle", function(){
  var streams = [];
  for(var i in sets) {
    var set = sets[i];
    var stream = gulp.src(set.sources)
                     .pipe(...)
                     .pipe(gulp.dest(set.destination));
    streams.push(stream);
  }
  var merged = es.concat.apply(es, streams);
  return merged;
});

所以它工作正常,但现在我的捆绑包已经足够大,我看到以下错误:

  

(节点)警告:检测到可能的EventEmitter内存泄漏。 11名听众补充道。使用emitter.setMaxListeners()来增加限制。

我已尝试应用thisthis等答案,但我似乎无法确定在哪里拨打setMaxListeners(0)

如何在合并信息流时拨打setMaxListeners

2 个答案:

答案 0 :(得分:1)

看起来关注的是event-stream模块(see this issue)。

目前,我能够通过这行代码来解决这个问题。当然,这会设置全局最大值,这是不理想的。

require('events').EventEmitter.prototype._maxListeners = 30;

问题似乎最终会在stream-combiner中解决,event-stream是{{1}}的依赖关系。

答案 1 :(得分:1)

Node 0.12中,您可以为所有实例设置EventEmitter.defaultMaxListeners