Как вызвать `setMaxListeners` при объединении потоков NodeJS

Я использую 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(), чтобы увеличить лимит.

Я пытался применить такие ответы, как этот и это, но я не могу понять, куда звонить setMaxListeners(0).

Как вызвать setMaxListeners при объединении потоков?


person bendytree    schedule 22.03.2014    source источник


Ответы (2)


Похоже, проблема связана с модулем event-stream (см. эту проблему).

На данный момент я смог подавить проблему с помощью этой строки кода. Конечно, это устанавливает глобальное максимальное значение, что не является идеальным.

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

Похоже, что проблема в конечном итоге будет решена в stream-combiner, которая является зависимостью event-stream.

person bendytree    schedule 24.03.2014

В Node 0.12 вы сможете установить EventEmitter.defaultMaxListeners для всех экземпляров.

person Sindre Sorhus    schedule 26.03.2014