web-dev-qa-db-de.com

Warum mag es gulp.src nicht, wenn ein Array mit vollständigen Pfaden zu Dateien übergeben wird?

Ich versuche, gulp.src ein Array von Dateien zu übergeben, mit denen es umgehen soll. Dies ist das aktuelle Array.

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

Ich stelle jedoch fest, 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 ein paar Platzhalterzeichen 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 Art und Weise zu tun, wie das Globbing funktioniert? Ich habe gegoogelt, kann es aber nicht herausfinden.

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

93
morganesque

Wenn Sie ein Array mit vollständigen Pfaden ü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 erraten). Daher befindet sich jede Datei im Stammverzeichnis des darin enthaltenen Ordners, und der relative Pfad ist leer.

Es gibt jedoch eine einfache Lösung. Übergeben Sie ein Objekt mit dem Schlüssel base als zweites Argument an gulp.src und alles wird den richtigen relativen Pfad haben:

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(...);
160
OverZealous