Модуль принимает только 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, поток автоматически завершает читаемую сторону, когда записываемая сторона заканчивается, и наоборот.
Надеюсь, это поможет вам и сэкономит ваше время