Задача Gulp создает только один выходной файл в режиме буфера
У меня есть задание gulp, которое использует плагин gulp, который я написал. Задача считывает любое количество файлов JSG swagger spec и в зависимости от содержимого создает различные файлы javascript api-клиента. В потоковом режиме он работает нормально и выдает несколько клиентов API, но в буферном режиме - только один.
Глоток Задача:
var gulp = require('gulp');
function SwaggerTasks() {
this.generate = function(sourceFiles, destinationFolder, options) {
return function() {
const apiClientGenerator = require('wnd-swagger-client-generator');
return gulp.src(sourceFiles, {base: './'})
.pipe(apiClientGenerator.generateAngularJSApiClient(options))
.pipe(gulp.dest(destinationFolder));
};
};
}
module.exports = new SwaggerTasks();
Плагин Gulp:
const _ = require('lodash');
const through = require('through2');
const concat = require('concat-stream');
SwaggerClientGenerator.prototype.generateAngularJSApiClient = function(options) {
var stream = through.obj(function(file, encoding, callback) {
const self = this;
if (file.isBuffer()) {
const swaggerSpec = JSON.parse(String(file.contents));
_processFile(file, swaggerSpec, self, options);
return callback();
}
if (file.isStream()) {
file.contents.pipe(concat(function(data) {
const swaggerSpec = JSON.parse(String(data));
_processFile(file, swaggerSpec, self, options);
return callback();
}));
}
});
return stream;
};
function _processFile(file, swaggerSpec, stream, options) {
var streamer = _generateAngularJsApiClientContent(swaggerSpec, options.moduleName);
streamer.on('error', stream.emit.bind(stream, 'error'));
if (file.isBuffer()) {
file.contents = streamer;
console.log('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ');
console.dir(file.contents);
console.log('$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ');
} else {
file.contents = file.contents.pipe(streamer);
}
file.path = `Api${_getApiName(swaggerSpec)}Client.js`;
console.log('########################################################################################### ');
console.log(file.path);
console.log('########################################################################################### ');
stream.push(file);
}
У меня настроены некоторые журналы консоли, поэтому, когда я запускаю задачу, я вижу, что она проходит через логику столько же раз, сколько и количество исходных файлов.
Я вижу новое и обработанное содержимое файла, а также их путь. Я не могу понять, почему при передаче параметра {buffer: false} в gulp.src, чтобы сделать его основанным на потоке, работает нормально, но при удалении параметра {buffer: false}, чтобы сделать его основанным на буфере, он генерирует только один выходной файл даже сквозь я вижу, как логика выполняется несколько раз.
Я прочитал документацию gulp, учебные пособия и примеры, и я, кажется, делаю все правильно в соответствии с документами. Любая помощь будет принята с благодарностью.
Спасибо.