J'essaye de mettre en scène un projet d'un répertoire de travail vers un serveur (même machine). En utilisant le code suivant:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Je m'attendrais à voir tous les fichiers copiés. Cependant, cela aplatit la structure des répertoires - tous les répertoires sont copiés mais chaque fichier est placé à la racine/var/www
Gulp semble être un excellent outil de construction, mais la copie d'éléments devrait certainement être un processus simple?
deployment
gulp
M1ke
la source
la source
/var/www/
? Vous pourriez essayer{css,js,src}/**/*
Réponses:
Ce qui suit fonctionne sans aplatir la structure des dossiers:
C'est
'**/*'
la partie importante. Cette expression est un glob qui est un puissant outil de sélection de fichiers. Par exemple, pour copier uniquement les fichiers .js, utilisez:'input/folder/**/*.js'
la source
.pipe(gulp.dest('output/folder'));
{base:"."}
méthode.base
valeur par défaut est "dossier" comme indiqué dans cette réponse. En d'autres termes, la base commence là où le motif glob commence. Cela m'a aidé à comprendre où finiraient mes fichiers et c'est aussi pourquoi vous n'avez pas besoin**/*
dugulp.dest
paramètre dans. Gulp prend tout dans le glob et le place dans le dossier dest avec la même structure.Il s'avère que pour copier une structure de répertoire complète
gulp
doit être fournie avec une base pour votregulp.src()
méthode.Ainsi
gulp.src( [ files ], { "base" : "." })
peut être utilisé dans la structure ci-dessus pour copier tous les répertoires de manière récursive.Si, comme moi, vous oubliez cela, essayez:
la source
base
vous êtes toujours déroutant, jetez un œil à stackoverflow.com/a/35848322/11912 qui fait un excellent travail pour l'expliquer.Donc - la solution de fournir une base fonctionne étant donné que tous les chemins ont le même chemin de base. Mais si vous souhaitez fournir différents chemins de base, cela ne fonctionnera toujours pas.
Une façon de résoudre ce problème était de rendre le début du chemin relatif. Pour votre cas:
La raison pour laquelle cela fonctionne est que Gulp définit la base comme étant la fin du premier morceau explicite - le premier * l'amène à définir la base au cwd (ce qui est le résultat que nous voulons tous!)
Cela ne fonctionne que si vous pouvez vous assurer que votre structure de dossiers n'aura pas certains chemins qui pourraient correspondre deux fois. Par exemple, si vous aviez
randomjs/
au même niveau quejs
, vous finiriez par faire correspondre les deux.C'est le seul moyen que j'ai trouvé pour les inclure dans le cadre d'une fonction gulp.src de niveau supérieur. Il serait probablement simple de créer un plugin / une fonction qui pourrait séparer chacun de ces globs afin que vous puissiez spécifier le répertoire de base pour eux, cependant.
la source
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, et c'est en fait ainsi que j'ai trouvé votre question - je cherchais une solution sur la façon de copier récursivement avec différents chemins de base. Essentiellement, cette solution fonctionne pour votre cas sans avoir à spécifier de base par défaut, mais aussi pour un cas de chemin multi-base, tant que vous pouvez vous assurer que l'étoile principale ne correspond à rien :)'assets/subdir/*fonts/*'
de copier le répertoire des polices.Si vous souhaitez copier tout le contenu d'un dossier de manière récursive dans un autre dossier, vous pouvez exécuter la commande Windows suivante à partir de gulp:
L'
/y
option à la fin est de supprimer le message de confirmation d'écrasement.Sous Linux, vous pouvez exécuter la commande suivante à partir de gulp:
vous pouvez utiliser le plugin gulp-exec ou gulp-run pour exécuter des commandes système à partir de gulp.
Liens connexes:
utilisation de xcopy
gulp-exec et gulp-run
la source