Поиск способа копирования файлов в gulp и переименование на основе родительского каталога

Для каждого модуля у меня есть некоторые файлы, которые нужно скопировать в каталог сборки, и я ищу способ свести к минимуму повторяющийся код:

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

примерно так:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

Очевидно, что это не работает, так есть способ сделать это, или npm, который уже делает это?

Спасибо

Ответ 1

Лучше всего настроить ваш base при поиске файлов, например:

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

Это говорит gulp использовать каталог модулей в качестве отправной точки для определения относительных путей.

(Кроме того, вы можете использовать /**/*.js, если хотите включить все файлы JS...)

Ответ 2

Не ответ, но применимый к этому вопросу в результатах поиска.

Чтобы скопировать файлы/папки в gulp

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);

Ответ 3

return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

Работал для меня!

Ответ 4

Сохранение дерева каталогов сохранения сохраняется.

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

Используя это, вы можете ввести src: .src(SRC_FOLDER + '/**/*.js').

Другие ответы не работают для меня (например, используя base: on src()}, потому что некоторые плагины сглаживают дерево каталогов.