Почему gulp.src не любит передавать массив полных путей к файлам?

94

Я пытаюсь передать gulp.src массив файлов, с которыми он должен иметь дело. Это массив в его нынешнем виде.

['bower_components/jquery/jquery.js',
 'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
 'bower_components/superscrollorama/jquery.superscrollorama.js' ]

Я обнаружил, что gulp.src, похоже, это не нравится, а третий элемент не попадает в конечный пункт назначения.

Я обнаружил, что все работает нормально, когда я ввожу такие подстановочные знаки:

['bower_components/**/jquery.js',
 'bower_components/**/js/greensock/TweenMax.min.js',
 'bower_components/**/jquery.superscrollorama.js' ]

Но почему? Что-то связано с тем, как работает подстановка? Я погуглил, но не могу узнать.

Возможно, это не является предполагаемой целью подстановки, но для меня не имеет смысла, что это должно работать таким образом. Кто-нибудь может пролить свет?

морганский
источник

Ответы:

162

Когда вы передаете массив полных путей, каждый файл обрабатывается независимо. Подстановка не знает, где находится корень пути (фактически, она предполагает, основываясь на первом глобусе). Таким образом, каждый файл имеет корень в папке, которую он содержит, а относительный путь пуст.

Однако есть простое решение. Передайте объект с ключом baseв качестве второго аргумента gulp.src, и все будет иметь правильный относительный путь:

return gulp.src(['bower_components/jquery/jquery.js',
                'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
                'bower_components/superscrollorama/jquery.superscrollorama.js' ],
            {base: 'bower_components/'})
        .pipe(...);
Чрезмерно рьяный
источник
23
Также: об этом вообще не упоминается в документации по gulp, вам нужно перейти к документации,glob-stream чтобы понять это.
OverZealous
9
что, если у всех путей не одна и та же база? У меня есть аналогичный вопрос, открытый для этого конкретного сценария: gulp src не читает требуемые значения массива json-файла
Андре
1
тот же вопрос с моей стороны. У меня есть две разные базы для задачи, которую мне нужно запустить
Синтия Санчес
4
Наверное, всегда где-то в файловой системе есть общая база, верно? Даже если это "/". Если gulp запускается из корня каталога вашего проекта, вы просто указываете текущий каталог в качестве базы и переходите к текущему каталогу. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
numbers1311407