Perché a gulp.src non piace ricevere un array di percorsi completi ai file?


94

Sto tentando di passare a gulp.src un array di file con cui voglio che si occupi. Questo è l'array così com'è.

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

Sto scoprendo però che gulp.src non sembra apprezzare e il terzo elemento non riesce a raggiungere la destinazione finale.

Ho scoperto che tutto funziona bene quando introduco alcuni caratteri jolly come questo:

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

Ma perché? Ha qualcosa a che fare con il modo in cui funziona il globbing? Ho cercato su Google ma non riesco a scoprirlo.

Forse questo non è lo scopo previsto del globbing, ma per me non ha senso che funzioni in questo modo. Qualcuno può far luce?

Risposte:


162

Quando si passa in una matrice di percorsi completi, ogni file viene elaborato in modo indipendente. Il globbing non sa dove sia la radice del percorso (infatti, ipotizza in base al primo glob). Pertanto, ogni file è radicato nella cartella che contiene e il percorso relativo è vuoto.

Tuttavia, esiste una soluzione semplice. Passa un oggetto con la chiave basecome secondo argomento a gulp.src, e tutto avrà il percorso relativo corretto:

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
Inoltre: questo non è affatto menzionato nei documenti di gulp, devi fare clic sui documenti perglob-stream capirlo.
OverZealous

9
e se i percorsi non hanno tutti la stessa base? Ho una domanda simile aperta per quel particolare scenario: gulp src non legge i valori dell'array del file json richiesto
Andre

1
stessa domanda da parte mia. Ho due basi diverse per l'attività che devo eseguire
Cynthia Sanchez

4
Probabilmente c'è sempre una base comune da qualche parte nel filesystem, giusto? Anche se lo è "/". Se gulp è in esecuzione dalla radice della directory del progetto, è sufficiente specificare la directory corrente come base e reindirizzare alla directory corrente. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
numeri 1311407
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.