У меня простая задача - создать несколько тем из файлов LESS.

gulp.task("themes-base", function () {
    return gulp
        .src(["./build/THEMES/*Theme.less"])
        .pipe(less())
        .pipe(postcss([autoprefixer()]))
        .pipe(chmod(666))
        .pipe(rename(function (path) {
            path.dirname += "/" + path.basename + "_New";
            path.basename = "styles";
            path.extname = ".css";
        }))
        .pipe(gulp.dest("./dist/Content/Themes"));
});

Просто получите все файлы из исходного каталога и на основе имени файла создайте выходной каталог и поместите в скомпилированный css.

Get AAATheme.less and compile it to Themes/AAA/styles.css  
Get BBBTheme.less and compile it to Themes/BBB/styles.css

Работает нормально.

Но теперь мне нужно для каждого обработанного файла LESS копировать ресурсы (изображения, шрифты, ...) из статической папки в папку темы.

Get everything from build/Images folder and copy all to Themes/AAA/Images
Get everything from build/Images folder and copy all to Themes/BBB/Images

Таким образом, каждая тема будет иметь одни и те же ресурсы в собственной папке.

Как я могу создать задачу, чтобы иметь возможность разрешить структуру каталогов назначения для копирования всех ресурсов после "gulp.dest"?

0
Raptor 23 Окт 2018 в 22:35

2 ответа

Лучший ответ

См., Например, выполнить одну и ту же задачу в нескольких папках.

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

// this gets an array of matching folders
const themeFolders = glob.sync('Themes/*/');
// console.log(themeFolders);

gulp.task('copy', () => {

  let stream;

  // work on each folder separately
  themeFolders.forEach(function (themeFolder) {

    stream = gulp.src( 'build/**/*' )
      // do other stuff here is you want
      .pipe(gulp.dest( themeFolder ));
  });
  return stream;
});

Это мощный метод, который полезно знать. Я не рассматривал случай, когда у вас есть папка Theme без файла styles.css, но эти папки при необходимости можно отфильтровать.

1
Mark 24 Окт 2018 в 00:52

Просто используйте задачи copy и /**/* для каталогов и подкаталогов.

gulp.task('copy', function () {
    gulp.src('./build/Images/**/*')
        .pipe(gulp.dest('./Themes/AAA/Images'));
});

Для динамического

gulp.task('copy', function () {
  return gulp.src('./build/Images/**/*')
    .pipe(uglify())
    .pipe(rename(function (path) {
        path.dirname += "/"+path.basename;
    }))
    .pipe(gulp.dest('./dist/Content/Themes'));
});
0
mooga 23 Окт 2018 в 20:17
52956628