Dlaczego gulp.src nie lubi, gdy przekazuje się tablicę pełnych ścieżek do plików?

94

Próbuję przekazać gulp.src tablicę plików, którymi ma się zająć. To jest tablica w obecnym stanie.

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

Uważam jednak, że plik gulp.src nie wygląda na to, a trzeci element nie dociera do miejsca docelowego.

Odkryłem, że wszystko działa dobrze, kiedy wprowadzam takie symbole wieloznaczne:

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

Ale dlaczego? Ma to coś wspólnego ze sposobem działania globbingu? Wyszukałem w Google, ale nie mogę się dowiedzieć.

Może nie jest to zamierzony cel globbingu, ale nie ma dla mnie sensu, żeby to działało w ten sposób. Czy może ktoś rzucić nieco światła?

morganesque
źródło

Odpowiedzi:

162

Gdy przekazujesz tablicę pełnych ścieżek, każdy plik jest przetwarzany niezależnie. Globbing nie wie, gdzie jest korzeń ścieżki (w rzeczywistości zgaduje na podstawie pierwszego globu). Dlatego każdy plik jest zakorzeniony w folderze, który zawiera, a ścieżka względna jest pusta.

Jest jednak proste rozwiązanie. Przekaż obiekt z kluczem basejako drugim argumentem do gulp.src, a wszystko będzie miało poprawną ścieżkę względną:

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(...);
OverZealous
źródło
23
Ponadto: w ogóle nie jest to wspomniane w dokumentach „gulp”, musisz kliknąć do dokumentów,glob-stream aby to zrozumieć.
OverZealous
9
co, jeśli ścieżki nie mają tej samej podstawy? Mam podobne pytanie otwarte dla tego konkretnego scenariusza: gulp src nie odczytuje wymaganych wartości tablicowych pliku JSON
Andre
1
to samo pytanie z mojej strony. Mam dwie różne bazy do zadania, które muszę uruchomić
Cynthia Sanchez
4
Prawdopodobnie zawsze jest gdzieś w systemie plików wspólna baza, prawda? Nawet jeśli tak "/". Jeśli gulp jest uruchamiany z katalogu głównego twojego katalogu projektu, po prostu określ bieżący katalog jako podstawę i potokuj do bieżącego katalogu. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
numery1311407