web-dev-qa-db-fra.com

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

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é: 

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'));

Évidemment, ce qui précède ne fonctionne pas, y a-t-il un moyen de faire cela, ou un npm qui le fait déjà?

Merci

91
chris

Le meilleur moyen est de configurer votre base lors de l’approvisionnement en fichiers, comme ceci:

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

Ceci indique à gulp d'utiliser le répertoire des modules comme point de départ pour déterminer les chemins relatifs.

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

131
OverZealous

Pas la réponse, mais applicable à l'apparition 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'))
);
211
Kirk Strobeck
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

Travaillé pour moi!

5
user2977367

Utiliser pour préserver 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;
}))

En utilisant cela, vous pouvez mettre dans le src: .src(SRC_FOLDER + '/**/*.js').

Les autres réponses n'ont pas fonctionné pour moi (par exemple, utiliser base: sur src()}, car certains plug-ins aplatissent l'arborescence des répertoires.

3
brnmonteiro

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/')),
)
);
0
Dan Alboteanu