Как правильно сохранить информацию из pipe в переменную и использовать эту переменную в потоке в дальнейшем?

В Gulp.js есть несколько способов сохранить информацию из pipe в переменную и использовать ее в потоке в дальнейшем. Рассмотрим несколько подходов.

Первый подход - использование плагина gulp-sequence. Этот плагин позволяет запускать задачи последовательно в заданном порядке. Для сохранения информации из pipe в переменную воспользуемся функцией run-sequence, которая вызывает задачи в указанном порядке и передает результат первой задачи во вторую задачу. Вот пример кода:

const gulp = require('gulp');
const runSequence = require('run-sequence');
const somePlugin = require('gulp-some-plugin');

gulp.task('task1', function() {
  return gulp.src('src/**/*.js')
    .pipe(somePlugin())
    .pipe(gulp.dest('dist'))
    .pipe(gulp.dest('saved_files')); // сохраняем информацию в переменную
});

gulp.task('task2', function() {
  return gulp.src('saved_files/**/*.js')
    .pipe(somePlugin())
    .pipe(gulp.dest('dist'));
});

gulp.task('default', function() {
  runSequence('task1', 'task2');
});

В примере выше, задача task1 выполняет обработку файлов и сохраняет их в директорию 'saved_files'. Затем, задача task2 получает файлы из 'saved_files' и продолжает обработку. Таким образом, информация из pipe сохраняется в переменную и используется в задаче task2.

Второй подход - использование переменных внутри gulp.task. В этом подходе мы объявляем переменную вне pipe и используем ее внутри pipe. Вот пример кода:

const gulp = require('gulp');
const somePlugin = require('gulp-some-plugin');

gulp.task('default', function() {
  let savedFiles;
  
  gulp.src('src/**/*.js')
    .pipe(somePlugin())
    .pipe(gulp.dest('dist'))
    .pipe(gulp.dest('saved_files')) // сохраняем информацию в переменную
    .on('data', function(file) {
      savedFiles.push(file); // сохраняем каждый файл в переменную
    });
  
  gulp.src(savedFiles)
    .pipe(somePlugin())
    .pipe(gulp.dest('dist'));
});

В примере выше, переменная savedFiles объявляется внутри gulp.task и инициализируется пустым массивом. Затем, в pipe используется метод on('data', ...), который вызывается для каждого файла, проходящего через pipe. В этом методе мы сохраняем каждый файл в переменную savedFiles. Затем, мы используем savedFiles в следующем pipe, чтобы обработать сохраненные файлы.

Оба подхода имеют свои достоинства и могут быть использованы в зависимости от конкретных требований вашего проекта.