Recherche d'un moyen de copier des fichiers dans gulp et de les renommer en fonction du répertoire parent

91

Pour chaque module, j'ai des fichiers qui doivent être copiés dans le répertoire de construction, et je cherche un moyen de minimiser le code répété à partir de ceci:

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

à quelque chose comme ça:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

De toute évidence, ce qui précède ne fonctionne pas, alors existe-t-il un moyen de le faire, ou un npm qui le fait déjà?

Merci

Chris
la source

Réponses:

131

Le meilleur moyen est de configurer votre baselors de la recherche de fichiers, comme ceci:

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

Cela indique gulpd'utiliser le répertoire modules comme point de départ pour déterminer les chemins relatifs.

(En outre, vous pouvez utiliser /**/*.jssi vous souhaitez inclure tous les fichiers JS ...)

Trop zélé
la source
6
Il doit y avoir une manière plus dynamique de faire cela - qu'en est-il lorsque les fichiers src proviennent de 2 répertoires différents et que vous voulez conserver leurs répertoires dans dest?
Ivan Durst
1
@IvanDurst J'ai géré ce cas spécifique avec le code OP (réponse). en utilisant la configuration de base et en utilisant le chemin relatif du fichier gulp aux fichiers indépendants et aux ./folder-example/**dossiers et fichiers complets.
Caio Wilson
210

Pas la réponse, mais applicable à l'apparence de cette question dans les résultats de recherche.

Pour copier des fichiers / dossiers dans gulp

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);
Kirk Strobeck
la source
2
Hmmm ... ma gulp dit que cette tâche est terminée, mais le fichier de sortie n'existe pas.
Tyguy7
4
Vous devez renvoyer le flux pour informer Gulp de la fin de la tâche.
Merott
2
Je ne comprends pas pourquoi une réponse qui dit "pas la réponse" a plus de votes positifs que la réponse acceptée qui répond à la question. Je ne suis pas sûr que nous devrions encombrer SO avec des réponses conçues pour inciter les moteurs de recherche à faire une chose particulière plutôt que de fournir des réponses à la question. Je pense que c'est le travail des moteurs de recherche de faire quelque chose d'utile de ce qu'ils obtiennent lorsqu'ils explorent le site. Just my $ 0.02
jinglesthula
9
@jinglesthula C'est un service utile pour ceux qui arrivent à cette question via les moteurs de recherche, indépendamment de la façon dont le moteur de recherche fait son travail. Je vous en suis reconnaissant.
jbkly
1
haha vient de réaliser que c'est plus populaire que la bonne question ou la bonne réponse: P
Kirk Strobeck
5
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

A travaillé pour moi!

user2977367
la source
.. même encore, c'est la réponse.
Kirk Strobeck
2
... alors quelqu'un peut-il le réécrire pour qu'il fonctionne tel quel , afin que les personnes qui viennent sur cette page à la recherche de cet extrait de code exact puissent l'utiliser?
Ivan Durst
Alors ... les parens et $ n "backreferences" sont-ils autorisés dans les globs src / dest? Ce ne sont pas des expressions régulières, afaik. Cela ressemble à ce que je recherche, mais les documents vinyl-fs sont plutôt laconiques sur les options .src () et .dest (), ce qui est autorisé et leur fonctionnement.
jinglesthula
3

L'utilisation pour conserver l'arborescence des répertoires d'entrée sera préservée.

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

Avec cela, vous pouvez mettre dans le répertoire src: .src(SRC_FOLDER + '/**/*.js').

Les autres réponses n'ont pas fonctionné pour moi (comme utiliser base:on src()}, car certains plugins aplatissent l'arborescence des répertoires.

brnmonteiro
la source
0

copier des fichiers en parallèle

gulp.task('copy', gulp.parallel(
() =>  gulp.src('*.json').pipe(gulp.dest('build/')),
() =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
() =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
)
);
Dan Alboteanu
la source