Gulp - запустить еще одну задачу для каждого файла из коллекции src - PullRequest
0 голосов
/ 23 октября 2018

У меня есть простая задача для создания нескольких тем из файлов 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"?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

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

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, но эти папки могут быть отфильтрованы при необходимости.

0 голосов
/ 23 октября 2018

Просто используйте задачу 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'));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...