Ich versuche, ein Projekt von einem Arbeitsverzeichnis auf einen Server (denselben Computer) zu übertragen. Verwenden Sie den folgenden Code:
gulp.src([
'index.php',
'css/**',
'js/**',
'src/**',
])
.pipe(gulp.dest('/var/www/'));
Ich würde erwarten, dass alle Dateien kopiert werden. Die Verzeichnisstruktur wird jedoch abgeflacht - alle Verzeichnisse werden kopiert, aber jede Datei wird im Stammverzeichnis abgelegt/var/www
Gulp scheint ein großartiges Build-Tool zu sein, aber das Kopieren von Elementen sollte sicherlich ein einfacher Vorgang sein?
deployment
gulp
M1ke
quelle
quelle
/var/www/
? Sie könnten versuchen{css,js,src}/**/*
Antworten:
Folgendes funktioniert, ohne die Ordnerstruktur zu reduzieren:
Das
'**/*'
ist der wichtige Teil. Dieser Ausdruck ist ein Glob, der ein leistungsstarkes Dateiauswahlwerkzeug ist. Verwenden Sie zum Kopieren von .js-Dateien beispielsweise Folgendes:'input/folder/**/*.js'
quelle
.pipe(gulp.dest('output/folder'));
{base:"."}
Methode.base
Standardwert "Ordner" ist, wie in dieser Antwort angegeben. Mit anderen Worten, die Basis beginnt dort, wo das Glob-Muster beginnt. Dies hat mir geholfen zu verstehen, wo meine Dateien landen würden, und ist auch der Grund, warum Sie das**/*
imgulp.dest
Parameter nicht benötigen . Gulp nimmt alles in den Globus und legt es mit derselben Struktur im Zielordner ab.Es stellt sich heraus, dass zum Kopieren einer vollständigen Verzeichnisstruktur
gulp
eine Basis für Ihregulp.src()
Methode bereitgestellt werden muss.So
gulp.src( [ files ], { "base" : "." })
kann in der Struktur verwendet werden , vor allem rekursiv die Verzeichnisse zu kopieren.Wenn Sie dies wie ich vergessen, versuchen Sie Folgendes:
quelle
base
immer noch verwirrt sind, schauen Sie sich stackoverflow.com/a/35848322/11912 an, wo Sie dies hervorragend erklären können.Die Lösung für die Bereitstellung einer Basis funktioniert also, da alle Pfade denselben Basispfad haben. Wenn Sie jedoch unterschiedliche Basispfade bereitstellen möchten, funktioniert dies immer noch nicht.
Eine Möglichkeit, dieses Problem zu lösen, bestand darin, den Anfang des Pfades relativ zu machen. Für Ihren Fall:
Der Grund, warum dies funktioniert, ist, dass Gulp die Basis als das Ende des ersten expliziten Blocks festlegt - das führende * bewirkt, dass die Basis am cwd festgelegt wird (was das Ergebnis ist, das wir alle wollen!).
Dies funktioniert nur, wenn Sie sicherstellen können, dass Ihre Ordnerstruktur nicht über bestimmte Pfade verfügt, die zweimal übereinstimmen könnten. Wenn Sie zum Beispiel
randomjs/
das gleiche Level wie hättenjs
, würden Sie am Ende beide übereinstimmen.Dies ist der einzige Weg, den ich gefunden habe, um diese als Teil einer gulp.src-Funktion der obersten Ebene einzuschließen. Es wäre wahrscheinlich einfach, ein Plugin / eine Funktion zu erstellen, die jeden dieser Globs trennen könnte, sodass Sie jedoch das Basisverzeichnis für sie angeben könnten.
quelle
However it flattens the dir structure - all directories are copied but every file is placed in the root /var/www
, und genau so habe ich Ihre Frage gefunden. Ich habe nach einer Lösung gesucht, wie rekursiv mit verschiedenen Basispfaden kopiert werden kann. Im Wesentlichen funktioniert diese Lösung für Ihren Fall, ohne eine Standardbasis angeben zu müssen, aber auch für einen Fall mit mehreren'assets/subdir/*fonts/*'
, das Schriftartenverzeichnis zu kopieren.Wenn Sie den gesamten Inhalt eines Ordners rekursiv in einen anderen Ordner kopieren möchten, können Sie den folgenden Windows-Befehl von gulp ausführen:
Die
/y
Option am Ende besteht darin, die Bestätigungsnachricht zum Überschreiben zu unterdrücken.Unter Linux können Sie den folgenden Befehl von gulp aus ausführen:
Sie können das Plugin gulp-exec oder gulp-run verwenden , um Systembefehle von gulp auszuführen.
Verwandte Links:
xcopy Verwendung
gulp-exec und gulp-run
quelle