web-dev-qa-db-de.com

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

Ich benutze derzeit gulp, um ein Bash-Skript aufzurufen, das mein dist/ Verzeichnis und verschiebt die entsprechenden Dateien in das saubere Verzeichnis. Ich würde dies gerne mit gulp machen, da ich nicht sicher bin, ob das Skript auf einem Nicht-Nix-Dateisystem funktionieren würde.
Bisher benutze ich das Modul "gulp-clean", um die dist/ Verzeichnis, aber wenn ich 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']);

aufrufen von gulp dist ergibt das dist/ Verzeichnis wird mit den richtigen Verzeichnissen gefüllt, aber sie sind alle leer

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

Wie kopiere ich die Verzeichnisse und deren Inhalt in das dist/ Mappe?

96
makenova

Sie müssen die Option base in src einfügen, um die Dateistruktur wie gewünscht beizubehalten:

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 Probleme haben, wenn Sie alle diese Quelldateien im Stammverzeichnis Ihres Projekts haben.

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

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

158
OverZealous

Die ursprüngliche Frage zielt nur auf Verzeichnisse (auch Ordner genannt) in ihrem gulp.src, Dh gulp.src(['_locales', ... In diesem Beispiel auf _locales Ist der Name eines Verzeichnisses .

Die akzeptierte Antwort verwendet ein glob Muster in ihrem gulp.src, Um Dateien irgendwo in anzuvisieren diese Verzeichnisse, dh gulp.src(['./_locales/**/*.*', ... (beachten Sie die Doppel-Sternchen und die Dateinamen-Erweiterung Sternchen). Die akzeptierte Antwort funktioniert ...

... aber die akzeptierte Antwort hebt nur die Option base hervor:

Sie müssen die Option base einschließen, um src ...

Ich experimentierte und fand:

  1. Genau genommen ist es nicht erforderlich, die Option base zu verwenden, um das zu erreichen, wonach das OP gefragt hat: "... und die entsprechenden Dateien zu verschieben in das saubere Verzeichnis. " Die base -Option funktioniert bewahrt in der Tat die Ordner + Datei -Struktur (wie in der akzeptierten Antwort beschrieben), aber die Option base ist nicht ausreichend , um die Dateien als OP zu verschieben fragte . Das Beibehalten der Ordner- und Dateistruktur ist wahrscheinlich das, was das OP erwartet , daher ist die akzeptierte Antwort gut, aber ...

  2. Nur um zu wiederholen, was die Dateien bewegt , sind es die glob Muster:

    1. Doppelter Stern (.../**/...) Sucht rekursiv in allen Unterordnern, Unterordnern, Unterordnern usw.

    2. Dateiname.Erweiterungs-Sternchen (.../*.*) Finden Dateien aller Namen und aller Erweiterungen. Also ich denke, dieser Teil verdient die größte Betonung!

  3. Die akzeptierte Antwort ändert etwas anderes. Es fügt jedem Pfadargument, das an ./ übergeben wird, das Präfix gulp.src hinzu. Ich denke das ist unnötig/überflüssig; Wenn es kein ./ gibt (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 Übung, mit ./ Explizit vorzugehen.

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

5
The Red Pea