¿Por qué a gulp.src no le gusta que le pasen una serie de rutas completas a archivos?


94

Estoy intentando pasar gulp.src una matriz de archivos con los que quiero que se ocupe. Esta es la matriz tal como está.

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

Sin embargo, descubro que a gulp.src no parece gustarle y el tercer elemento no llega al destino final.

Descubrí que todo funciona bien cuando presento algunos caracteres comodín como este:

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

¿Pero por qué? ¿Algo que ver con la forma en que funciona el globbing? Busqué en Google pero no puedo averiguarlo.

Tal vez este no sea el propósito de globbing, pero para mí no tiene sentido que funcione de esta manera. ¿Alguien puede arrojar algo de luz?

Respuestas:


162

Cuando pasa una serie de rutas completas, cada archivo se procesa de forma independiente. El globbing no sabe dónde está la raíz de la ruta (de hecho, adivina basándose en el primer glob). Por lo tanto, cada archivo tiene su raíz en la carpeta que contiene y la ruta relativa está vacía.

Sin embargo, existe una solución sencilla. Pase un objeto con la clave basecomo segundo argumento gulp.srcy todo tendrá la ruta relativa correcta:

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
Además: esto no se menciona en los documentos de gulp en absoluto, debe hacer clic en los documentos paraglob-stream resolverlo.
exceso de celo

9
¿Qué pasa si los caminos no tienen todos la misma base? Tengo una pregunta similar abierta para ese escenario en particular: gulp src no lee los valores de matriz del archivo json requerido
Andre

1
misma pregunta de mi lado. Tengo dos bases diferentes para la tarea que necesito ejecutar
Cynthia Sanchez

4
Probablemente siempre haya una base común en algún lugar del sistema de archivos, ¿verdad? Incluso si lo es "/". Si gulp se está ejecutando desde la raíz del directorio de su proyecto, solo debe especificar el directorio actual como base y pasar al directorio actual. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
números 1311407
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.