Как сделать динамическую генерацию для dest в зависимости от src?

Для динамической генерации пути каталога назначения (dest) в зависимости от пути исходных файлов (src) в рабочем процессе Gulp.js есть несколько подходов.

Первый подход - использование функции dest. В качестве аргумента функции dest можно передать функцию, которая будет использоваться для генерации пути назначения. В этой функции вы можете получить доступ к объекту File посредством потока Vinyl и возвратить нужный путь для каждого файла. Например:

const gulp = require('gulp');
const path = require('path');

function destFunction(file) {
  // получаем относительный путь к исходному файлу
  const relativePath = file.relative;

  // преобразуем путь, добавляя нужные каталоги и расширение
  const destinationPath = path.join('build', relativePath);

  // возвращаем сгенерированный путь
  return destinationPath;
}

gulp.task('default', function() {
  return gulp.src('src/**/*')
    .pipe(gulp.dest(destFunction));
});

Второй подход - использование плагина gulp-rename. Этот плагин позволяет переименовывать файлы и изменять пути. Вы можете использовать его для генерации пути назначения на основе пути исходного файла. Вот пример:

const gulp = require('gulp');
const rename = require('gulp-rename');

gulp.task('default', function() {
  return gulp.src('src/**/*')
    .pipe(rename(function(file) {
      // получаем относительный путь к исходному файлу
      const relativePath = file.relative;

      // меняем путь назначения, добавляя нужные каталоги
      file.dirname = 'build/' + relativePath;
    }))
    .pipe(gulp.dest('dest'));
});

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