Как динамически разобрать путь в gulp.src.options.base

Я пытаюсь написать приложение на основе gulp, используя main-bower-files. Я хочу скопировать все мои файлы ресурсов и файлы ресурсов вендора в папку%build_dir%/assets, но файлы шрифтов должны быть скопированы в %build_dir%/assets / fonts. Без вендорных файлов это легко сделать с помощью опции gulp.src.options.base. Но я не могу понять, как это сделать с файлами поставщика. Теперь у меня есть

gulp.task('assets', ['less'], function() {
    return gulp.src('src/less/fonts/*', {base: 'src/less'})
        .pipe(addSrc('src/assets/**.*'))
        .pipe(addSrc(mainBowerFiles(/.*woff|woff2|otf|ttf/, {includeDev: true})))
        .pipe(gulp.dest(buildDir + '/assets'));
});

Но он копирует вендорные шрифты в %build_dir%/assets. Таким образом, идеальный вариант - записать базу в виде регулярного выражения, которое анализирует путь к шрифту поставщика и использует весь путь до / fonts. Как это сделать?

Папка Vendor имеет следующую структуру:

/bower_components
   /lib1
      /fonts
         font1.woff
   /lib2
      /fonts
         font2.otf
   /lib3
      /fonts
         font3.ttf

1 ответ

Решение

Таким образом, идеальный вариант - записать базу в виде регулярного выражения, которое анализирует путь к шрифту поставщика и использует весь путь до /fonts. Как это сделать?

Невозможно. base опция не поддерживает регулярные выражения. Только строки.

Вам не нужно base вариант в любом случае. Просто создайте два потока, каждый со своим gulp.dest(), Затем объедините эти потоки, используя merge-stream:

var merge = require('merge-stream');

gulp.task('assets', ['less'], function() {
  return merge(
    gulp.src(['src/less/fonts/*'].concat(mainBowerFiles(/.*woff|woff2|otf|ttf/, {includeDev: true})))
        .pipe(gulp.dest(buildDir + '/assets/fonts')),
    gulp.src('src/assets/**.*')
        .pipe(gulp.dest(buildDir + '/assets')));
});

Это также означает, что вам не нужно gulp-add-src больше.

Другие вопросы по тегам