web-dev-qa-db-fra.com

Pourquoi gulp.src n'aime-t-il pas recevoir un tableau de chemins d'accès complets aux fichiers?

J'essaie de transmettre à gulp.src un tableau de fichiers que je souhaite gérer. C'est le tableau tel qu'il est.

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

Je constate cependant que gulp.src ne semble pas aimer cela et que le troisième élément ne parvient pas à atteindre la destination finale.

J'ai constaté que tout fonctionnait bien lorsque j'introduisais des caractères génériques comme celui-ci:

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

Mais pourquoi? Quelque chose à voir avec la façon dont fonctionne globbing? J'ai googlé mais je ne peux pas le savoir.

Peut-être que ce n’est pas l’objectif visé par le dérapage, mais cela n’a aucun sens de penser que cela devrait fonctionner ainsi. Quelqu'un peut-il nous éclairer?

93
morganesque

Lorsque vous transmettez un tableau de chemins complets, chaque fichier est traité indépendamment. Le globbing ne sait pas où se trouve la racine du chemin (en fait, il devine en fonction du premier glob). Par conséquent, chaque fichier est enraciné dans le dossier qu'il contient et le chemin relatif est vide.

Cependant, il existe une solution facile. Passez un objet avec la clé base comme deuxième argument de gulp.src, et tout aura le chemin relatif correct:

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