Suchen Sie nach einer Möglichkeit, Dateien in gulp zu kopieren und basierend auf dem übergeordneten Verzeichnis umzubenennen


91

Für jedes Modul habe ich einige Dateien, die in das Build-Verzeichnis kopiert werden müssen, und suche nach einer Möglichkeit, den wiederholten Code daraus zu minimieren:

gulp.src('./client/src/modules/signup/index.js')
  .pipe(gulp.dest('./build/public/js/signup'));

gulp.src('./client/src/modules/admin/index.js')
  .pipe(gulp.dest('./build/public/js/admin'));

zu so etwas:

gulp.src('./client/src/modules/(.*)/index.js')
  .pipe(gulp.dest('./build/public/js/$1'));

Offensichtlich funktioniert das oben genannte nicht. Gibt es also eine Möglichkeit, dies zu tun, oder eine npm, die dies bereits tut?

Vielen Dank

Antworten:


131

Der beste Weg ist, Ihre basebei der Beschaffung von Dateien wie folgt zu konfigurieren :

gulp.src('./client/src/modules/**/index.js', {base: './client/src/modules'})
  .pipe(gulp.dest('./build/public/js/'));

Das sagt gulp an, das Modulverzeichnis als Ausgangspunkt für die Bestimmung der relativen Pfade zu verwenden.

(Sie können auch verwenden, /**/*.jswenn Sie alle JS-Dateien einschließen möchten ...)


6
Es muss einen dynamischeren Weg geben, dies zu tun - was ist, wenn src-Dateien aus zwei verschiedenen Verzeichnissen stammen und Sie ihre Verzeichnisse in dest beibehalten möchten?
Ivan Durst

1
@IvanDurst Ich habe diesen speziellen Fall mit dem OP-Code (Antwortcode) verwaltet. Verwenden der Basiskonfiguration und Verwenden des relativen Pfads von der Gulp-Datei zu unabhängigen Dateien und ./folder-example/**vollständigen Ordnern und Dateien.
Caio Wilson

210

Nicht die Antwort, aber zutreffend für das Erscheinen dieser Frage in den Suchergebnissen.

So kopieren Sie Dateien / Ordner in gulp

gulp.task('copy', () => gulp
  .src('index.js')
  .pipe(gulp.dest('dist'))
);

2
Hmmm ... mein Schluck sagt, dass diese Aufgabe abgeschlossen ist, aber die Ausgabedatei existiert nicht.
Tyguy7

4
Sie müssen den Stream zurückgeben, um Gulp zu informieren, wenn die Aufgabe abgeschlossen ist.
Merott

2
Ich bin verwirrt, warum eine Antwort, die "nicht die Antwort" sagt, mehr positive Stimmen hat als die akzeptierte Antwort, die die Frage beantwortet. Ich bin mir nicht sicher, ob wir SO mit Antworten überhäufen sollten, die Suchmaschinen dazu bringen sollen, etwas Besonderes zu tun, anstatt Antworten auf die Frage zu geben. Ich denke, es ist die Aufgabe von Suchmaschinen, etwas Nützliches aus dem zu machen, was sie beim Crawlen der Website erhalten. Nur meine $ 0.02
Jinglesthula

9
@jinglesthula Es ist ein nützlicher Service für diejenigen, die über Suchmaschinen zu dieser Frage gelangen, unabhängig davon, wie gut die Suchmaschine ihre Arbeit macht. Ich schätze es.
jbkly

1
haha gerade erkannt, dass dies populärer ist als die richtige Frage oder die richtige Antwort: P
Kirk Strobeck

5
return gulp.src('./client/src/modules/(.*)/index.js')  
  .pipe(gulp.dest('./build/public/js/$1'));

Hat für mich gearbeitet!


.. auch noch, das ist die Antwort.
Kirk Strobeck

2
... also kann jemand es umschreiben, damit es so funktioniert, wie es ist, damit Leute, die auf diese Seite kommen und nach genau diesem Codeausschnitt suchen, es tatsächlich verwenden können?
Ivan Durst

Also ... sind Parens und $ n "Backreferences" in src / dest globs erlaubt? Sie sind keine Regexes, afaik. Das sieht so aus, wie ich es suche, aber die Vinyl-Fs-Dokumente sind in den Optionen .src () und .dest () ziemlich knapp und was in ihnen erlaubt ist und wie sie funktionieren.
Jinglesthula

3

Die Verwendung zum Speichern des Eingabeverzeichnisbaums bleibt erhalten.

.pipe(gulp.dest(function(file) {
    var src = path.resolve(SRC_FOLDER);
    var final_dist = file.base.replace(src, '');
    return DIST_FOLDER + final_dist;
}))

Mit diesem können Sie die src eingeben : .src(SRC_FOLDER + '/**/*.js').

Die anderen Antworten haben bei mir nicht funktioniert (wie bei der Verwendung von base:on src()}, da einige Plugins den Verzeichnisbaum reduzieren.


0

Dateien parallel kopieren

gulp.task('copy', gulp.parallel(
() =>  gulp.src('*.json').pipe(gulp.dest('build/')),
() =>  gulp.src('*.ico').pipe(gulp.dest('build/')),
() =>  gulp.src('img/**/*').pipe(gulp.dest('build/img/')),
)
);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.