Есть какой-нибудь способ в Gulp получить согласованный шаблон глобуса в потоке?

#gulp

#gulp

Вопрос:

Есть ли какой-нибудь способ узнать, какому шаблону глобуса соответствует объект Vinyl в src() потоке Gulp? Например, с помощью rename плагина я могу получить Vinyl объект и получить его path , dirname и тому подобное. Но прямо сейчас в моем Gulpfile у меня есть некоторая логика для воссоздания шаблона глобуса с помощью таблицы подстановки (для синхронизации с локальным активным сайтом из репозитория разработчиков).

Ответ №1:

Я не вижу никакой документации, предполагающей, что согласованный шаблон глобуса записан вместе с файлом. Если вы передаете массив в gulp.src , вы можете попытаться сопоставить путь текущего файла с массивом, используя micromatch библиотеку. Для этого потребовалось бы, чтобы переданные шаблоны глобуса были уникальными в том смысле, что конкретному файлу могло соответствовать не более одного шаблона.

Пример для этого:

 const gulp = require('gulp'),
    tap = require('gulp-tap'),
    mm = require('micromatch');

function example() {
    const srcGlobPatternsArray = ['src/js/**/*.js', 'src/css/**/*.css'];
    return gulp.src(srcGlobPatternsArray).pipe(
        tap((file) => {
            const globIndex = srcGlobPatternsArray.findIndex((element) => {
                return mm.isMatch(
                    file.history[0].substring(file.cwd.length   1),
                    element
                );
            });
            if (globIndex !== -1) {
                console.log(
                    'Glob pattern matched: '  
                        srcGlobPatternsArray[globIndex]  
                        ' at index '  
                        globIndex
                );
            } else {
                console.log('Could not match glob');
            }
        })
    );
}

exports.default = example;
  

Комментарии:

1. Спасибо, я собираюсь принять этот ответ как «Нет: это невозможно сделать напрямую».