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

Спасибо.

0 ответов

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