Verwenden Sie gulp, um Verzeichnisse und ihre Dateien auszuwählen und zu verschieben

98

Ich verwende derzeit gulp, um ein Bash-Skript aufzurufen, das mein dist/Verzeichnis bereinigt und die entsprechenden Dateien in das Bereinigungsverzeichnis verschiebt. Ich möchte, dass dies mit gulp gemacht wird, da ich nicht sicher bin, ob das Skript auf einem Nicht-Nix-Dateisystem funktioniert.
Bisher verwende ich das Modul gulp-clean, um das dist/Verzeichnis zu bereinigen. Wenn ich jedoch versuche, die erforderlichen Verzeichnisse und ihre Dateien in den Ordner dist zu verschieben, sind die Verzeichnisse leer.

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

Das Aufrufen gulp distführt dazu, dass das dist/Verzeichnis mit den richtigen Verzeichnissen gefüllt wird, aber alle leer sind

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

Wie kopiere ich die Verzeichnisse und deren Inhalt in den dist/Ordner?

Makenova
quelle

Antworten:

162

Sie müssen die baseOption src einfügen, wodurch die Dateistruktur wie gewünscht erhalten bleibt:

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

Außerdem werden Sie wahrscheinlich später Probleme haben, wenn Sie alle diese Quelldateien im Stammverzeichnis Ihres Projekts haben.

Wenn Sie können, würde ich empfehlen, dass Sie einen einzelnen src/Ordner verwenden und alle Ihre anwendungsspezifischen Dateien dorthin verschieben. Dies erleichtert die weitere Wartung und verhindert, dass Ihre Build-spezifischen Dateien mit Ihren anwendungsspezifischen Dateien verwechselt werden.

Wenn Sie dies tun, ersetzen Sie einfach alle Vorkommen von ./durch durch src/im obigen Beispiel.

Übereifrig
quelle
1
Hat nur nach der Reorganisation der Dateien einwandfrei funktioniert, aber Ihre Argumentation ist stichhaltig, daher markiere ich Ihre Antwort als richtig. Danke dir.
Makenova
2
Verwenden Sie zum Gegenteil das Schlucken. stackoverflow.com/questions/21153338/…
Tony Gutierrez
2
Stellen Sie als Hinweis für alle anderen, die dies getan haben, sicher, dass Sie die readOption in src nicht auf false( truestandardmäßig auf) eingestellt haben.
Yndolok
3
Wenn ich das mache, kopiert es mit den gesamten Root-Verzeichnissen.
Nomadme
5

Die ursprüngliche Frage zielt nur auf Verzeichnisse (auch als Ordner bezeichnet) ab gulp.src, dh gulp.src(['_locales', ...in diesem Beispiel _localesist dies der Name eines Verzeichnisses .

Die akzeptierte Antwort verwendet ein globMuster in seinem gulp.srcZiel Dateien in diesen Verzeichnissen überall, das heißt gulp.src(['./_locales/**/*.*', ..., ( man beachte die Doppel Sternchen und die filename.extension Sternchen). Die akzeptierte Antwort funktioniert ...

... aber die akzeptierte Antwort betont nur die baseOption :

Sie müssen die baseOption zu src ...

Ich experimentierte und fand:

  1. Genau genommen ist es nicht erforderlich, die baseOption zu verwenden, um die vom OP geforderten Ergebnisse zu erzielen: "... und die entsprechenden Dateien in das saubere Verzeichnis zu verschieben." Die baseOption wird erhalten in der Tat die Ordner + Dateistruktur (wie in der akzeptierten Antwort beschrieben), aber die baseOption ist nicht ausreichend , um die Dateien zu bewegen , wenn der OP gefragt . Das Beibehalten der Ordner- + Dateistruktur ist wahrscheinlich das, was das OP erwartet , daher ist die akzeptierte Antwort gut, aber ...

  2. Nur um zu wiederholen , was nicht die Dateien verschieben, ist es die globMuster:

    1. Double-asterisk ( .../**/...) sucht rekursiv in allen Unterordnern und Unterordnern 'Unterordnern' usw.

    2. Filename.extension asterisks ( .../*.*) findet Dateien mit allen Namen und allen Erweiterungen . Ich denke, dieser Teil verdient die größte Betonung!

  3. Die akzeptierte Antwort ändert etwas anderes; Es fügt ./jedem Pfadargument, an das übergeben wird, ein Präfix von hinzu gulp.src. Ich denke, das ist unnötig / überflüssig; Wenn dies nicht ./der Fall ist (wie in der OP-Frage), werden die Pfade relativ zum aktuellen Verzeichnis aufgelöst, was zu demselben Verhalten führt . Aber vielleicht ist es eine gute Praxis, mit dem explizit umzugehen./

Lassen Sie mich wissen, wenn ich mich irre ...

Die rote Erbse
quelle