Pourquoi gulp.src n'aime-t-il pas se faire passer un tableau de chemins complets vers des fichiers?

94

J'essaie de transmettre à gulp.src un tableau de fichiers que je veux qu'il traite. Voici 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 trouve 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 trouvé que tout fonctionnait bien lorsque j'introduis 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 le fonctionnement du globbing? J'ai cherché sur Google mais je ne peux pas le découvrir.

Peut-être que ce n'est pas le but du globbing, mais cela n'a pas de sens pour moi que cela fonctionne de cette façon. Quelqu'un peut-il nous éclairer?

morganesque
la source

Réponses:

162

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 sur la base du premier glob). Par conséquent, chaque fichier est enraciné dans le dossier qu'il contient et le chemin d'accès relatif est vide.

Cependant, il existe une solution simple. Passez un objet avec la clé basecomme deuxième argument à 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(...);
Trop zélé
la source
23
Aussi: Cela n'est pas du tout mentionné dans les documents de gulp, vous devez cliquer sur les documents pourglob-stream le comprendre.
OverZealous
9
et si les chemins n'ont pas tous la même base? J'ai une question similaire ouverte pour ce scénario particulier: gulp src ne lit pas les valeurs de tableau du fichier json requises
Andre
1
même question de mon côté. J'ai deux bases différentes pour la tâche que je dois exécuter
Cynthia Sanchez
4
Il y a probablement toujours une base commune quelque part dans le système de fichiers, n'est-ce pas? Même si c'est "/". Si gulp s'exécute à partir de la racine de votre répertoire de projet, vous devez simplement spécifier le répertoire actuel comme base et rediriger vers le répertoire actuel. gulp.src(mixed, {base: "."}).pipe(doStuff).pipe(dest("."))
Numéros1311407