Модуль принимает только 8/16 файлов

В настоящее время я работаю с модулем throught2, чтобы написать плагин gulp для замены чего-либо в буфере, ниже приведена его упрощенная версия

module.exports = function(replaceData: DataChange | DataChange[]) {
  let count = 0;
  return through.obj(function (file: any, encoding: any, callback: any) {
    this.push(file);
    callback(null, file);
    console.log('@COUNT: ', ++count);
  });
};

Я обнаружил, что он подберет только 8 файлов и продолжит, игнорируя другие, мой вывод будет таким:

@COUNT: 1
@COUNT: 2
...
@COUNT: 8

Если я не верну ничего в обратном вызове

module.exports = function(replaceData: DataChange | DataChange[]) {
  let count = 0;
  return through.obj(function (file: any, encoding: any, callback: any) {
    this.push(file);
    callback();
    console.log('@COUNT: ', ++count);
  });
};

он будет обрабатывать 16 файлов. Как увеличить количество файлов, через которые подберут?

1 ответ

То, что я обнаружил для through2, - это ожидание потоков, наследуемых от Readable & Writable.

Читаемый / записываемый по умолчанию hihghWaterMark - 16K. Без потребителя для потока преобразования trans2, сбрасывающего давление, он достигает максимальной отметки и буферизируется после 16 записей. В случае возврата файла в обратном вызове (случай 1), это 8 файлов и 8 файлов, поэтому он выбирает только 8.

Решение будет состоять в том, чтобы перейти к сквозным 2 вариантам, т.е.

return through.obj({highWaterMark: 32}, function (file: any, encoding: any, callback: any) {

и он подберет 32 файла в моем случае.

Поддерживаемые параметры включают в себя:

  • highWaterMark (по умолчанию 16)
  • defaultEncoding (по умолчанию 'utf8')
  • encoding - 'utf8', 'base64', 'utf16le', 'ucs2' и т. д. Если указано, декодер StringDecoder будет присоединен к потоку.
  • читаемый {логический}
  • доступный для записи {логический}
  • allowHalfOpen {boolean} Если задано значение false, поток автоматически завершает читаемую сторону, когда записываемая сторона заканчивается, и наоборот.

Надеюсь, это поможет вам и сэкономит ваше время

Другие вопросы по тегам