Warum mag es gulp.src nicht, ein Array vollständiger Pfade zu Dateien übergeben zu bekommen?


94

Ich versuche, gulp.src ein Array von Dateien zu übergeben, mit denen es sich befassen soll. Dies ist das Array in seiner jetzigen Form.

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

Ich finde jedoch, dass gulp.src das nicht zu mögen scheint und das dritte Element es nicht bis zum Endziel schafft.

Ich habe festgestellt, dass alles gut funktioniert, wenn ich einige Platzhalterzeichen wie das folgende einführe:

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

Aber wieso? Hat das etwas mit der Funktionsweise von Globbing zu tun? Ich habe gegoogelt, kann es aber nicht herausfinden.

Vielleicht ist dies nicht der beabsichtigte Zweck des Globbens, aber es macht für mich keinen Sinn, dass es so funktionieren sollte. Kann jemand etwas Licht ins Dunkel bringen?

Antworten:


162

Wenn Sie ein Array vollständiger Pfade übergeben, wird jede Datei unabhängig verarbeitet. Das Globbing weiß nicht, wo sich die Wurzel des Pfades befindet (tatsächlich wird basierend auf dem ersten Glob vermutet). Daher ist jede Datei in dem Ordner verwurzelt, den sie enthält, und der relative Pfad ist leer.

Es gibt jedoch eine einfache Lösung. Übergeben Sie ein Objekt mit dem Schlüssel baseals zweitem Argument an gulp.src, und alles hat den richtigen relativen Pfad:

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
Außerdem: Dies wird in den gulp-Dokumenten überhaupt nicht erwähnt. Sie müssen sich durch die Dokumenteglob-stream klicken, um dies herauszufinden.
OverZealous

9
Was ist, wenn die Pfade nicht alle dieselbe Basis haben? Ich habe eine ähnliche Frage offen für dieses spezielle Szenario: gulp src liest nicht die erforderlichen Array-Werte der json-Datei
Andre

1
gleiche Frage von meiner Seite. Ich habe zwei verschiedene Grundlagen für die Aufgabe, die ich ausführen muss
Cynthia Sanchez

4
Es gibt wahrscheinlich immer eine gemeinsame Basis irgendwo im Dateisystem, oder? Auch wenn es so ist "/". Wenn gulp vom Stammverzeichnis Ihres Projektverzeichnisses ausgeführt wird, geben Sie einfach das aktuelle Verzeichnis als Basis an und leiten es an das aktuelle Verzeichnis weiter. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
Nummern 1311407
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.