Utilisez gulp pour sélectionner et déplacer les répertoires et leurs fichiers

J’utilise actuellement gulp pour appeler un script bash qui nettoie mon répertoire dist/ et déplace les fichiers appropriés dans le répertoire clean. Je voudrais que cela se fasse avec gulp, car je ne suis pas sûr que le script fonctionne sur un système de fichiers non * nix.
Jusqu’à présent, j’utilise le module gulp-clean pour nettoyer le répertoire dist/ , mais lorsque j’essaie de déplacer les répertoires requirejs et leurs fichiers dans le dossier dist, les répertoires sont vides.

 var gulp = require('gulp'), clean = require('gulp-clean'); gulp.task('clean', function(){ return gulp.src(['dist/*'], {read:false}) .pipe(clean()); }); gulp.task('move',['clean'], function(){ gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json']) .pipe(gulp.dest('dist')); }); gulp.task('dist', ['move']); 

appeler gulp dist entraîne l’ dist/ répertoire dist/ avec les bons répertoires, mais ils sont tous vides

 $ ls dist/* dist/manifest.json dist/_locales: dist/icons: dist/page_action: 

Comment copier les répertoires et leur contenu dans le dossier dist/ ?

Vous devez inclure l’ option de base à src, ce qui préservera la structure du fichier comme vous le souhaitez:

 var filesToMove = [ './_locales/**/*.*', './icons/**/*.*', './src/page_action/**/*.*', './manifest.json' ]; gulp.task('move',['clean'], function(){ // the base option sets the relative root for the set of files, // preserving the folder structure gulp.src(filesToMove, { base: './' }) .pipe(gulp.dest('dist')); }); 

De plus, vous aurez probablement des problèmes si vous avez tous ces fichiers sources à la racine de votre projet.

Si vous le pouvez, je vous recommande d’utiliser un seul dossier src/ et d’y déplacer tous vos fichiers spécifiques à l’application. Cela facilite la progression de la maintenance et empêche les fichiers spécifiques à votre build d’être mélangés avec les fichiers spécifiques à votre application.

Si vous faites cela, remplacez simplement toutes les occurrences de ./ par src/ dans l’exemple ci-dessus.

La question originale ne cible que les répertoires (dossiers aka) dans son gulp.src , c.-à-d. gulp.src(['_locales', ... dans cet exemple, _locales est le nom d’un répertoire .

La réponse acceptée utilise un modèle de glob dans ses fichiers gulp.src pour cibler des fichiers n’importe où dans ces répertoires, par exemple gulp.src(['./_locales/**/*.*', ... , ( et l’astérisque filename.extension ) .La réponse acceptée fonctionne …

mais la réponse acceptée ne fait que souligner l’option de base :

Vous devez inclure l’ option de base à src …

J’ai expérimenté et trouvé:

  1. Ssortingctement parlant, il est inutile d’utiliser l’option de base pour obtenir ce que l’OP a demandé: “… et déplace les fichiers appropriés vers le répertoire clean”. L’option de base préserve en effet la structure de dossier + fichier (comme décrit dans la réponse acceptée), mais l’option de base n’est pas suffisante pour déplacer les fichiers comme demandé par l’OP. Préserver le dossier + la structure des fichiers est probablement ce que le PO attend , donc la réponse acceptée est bonne, mais …

  2. Juste pour répéter ce qui fait bouger les fichiers, ce sont les modèles glob :

    1. Double-astérisque ( .../**/... ) recherche récursivement dans tous les sous-dossiers et sous-dossiers des sous-dossiers, etc.

    2. Filstall.extension asterisks ( .../*.* ) Recherche les fichiers de tous les noms et toutes les extensions . Donc je pense que cette partie mérite le plus d’attention!

  3. La réponse acceptée change quelque chose d’autre; il ajoute un préfixe de ./ à chaque argument de chemin passé à gulp.src . Je pense que c’est inutile / redondant; s’il n’y a pas de ./ (comme dans la question OP), les chemins sont résolus par rapport au répertoire en cours, ce qui entraîne le même comportement . Mais peut-être que c’est une bonne pratique d’être explicite avec le ./

Faites moi savoir si je me trompe …