So kopieren Sie mehrere Dateien und behalten die Ordnerstruktur mit Gulp bei

77

Ich versuche, Dateien mit Gulp von einem Ordner in einen anderen Ordner zu kopieren:

gulp.task('move-css',function(){
  return gulp.src([
    './source/css/one.css',
    './source/other/css/two.css'

    ]).pipe(gulp.dest('./public/assets/css/'));
});

Der obige Code kopiert one.css& two.cssin den public/assets/cssOrdner.

Und wenn ich es benutze gulp.src('./source/css/*.css'), werden alle CSS-Dateien in den public/assets/cssOrdner kopiert, was nicht das ist, was ich will.

Wie wähle ich mehrere Dateien aus und behalte die Ordnerstruktur bei?

NullPoiиteя
quelle
@lal CSS-Dateien können sich in verschiedenen Ordnern befinden, so dass reguläre Ausdrücke in diesem Fall nicht nützlich sind. IMHO
NullPoiиteя
Ist das Problem, dass Dateien in mehreren Ordnern in einen Ordner kopiert werden public/assets/css?
Anulal S
yupp, genau, ich möchte das tun
NullPoiиteя

Antworten:

140

Um dies zu erreichen, geben Sie bitte an base.

¶ base - Geben Sie den Ordner relativ zum cwd an. Standardmäßig beginnt der Glob. Dies wird verwendet, um die Dateinamen beim Speichern in zu bestimmen.dest()


In Ihrem Fall wäre es:

gulp.task('move-css',function(){
  return gulp.src([
      './source/css/one.css',
      './source/other/css/two.css'
  ],  {base: './source/'}) 
  .pipe(gulp.dest('./public/assets/'));
});

Ordnerstruktur:

.
├── gulpfile.js
├── source
│   ├── css
│   └── other
│       └── css
└── public
    └── assets
Anulal S.
quelle
20
Wenn Ihre Dateien völlig unterschiedliche Verzeichnisstrukturen haben (z. B. ['./lib/one.js', './models/two.js']), können Sie hinzufügen {base: '.'}, damit die gesamte Struktur erhalten bleibt.
Tim
Wie analysiere ich alle Dateien, Ordner und Unterordner in src?
Reign.85
1
Bitte überprüfen Sie src mit double **gulp.src('**/*.*')
Anulal S
1

Ich benutze gulp-flatten und benutze diese Konfiguration:

var gulp = require('gulp'),
    gulpFlatten = require('gulp-flatten');

var routeSources = {
  dist:  './public/',
  app: './app/',
  html_views: {
    path: 'app/views/**/*.*',
    dist: 'public/views/'
  }
};

gulp.task('copy-html-views', task_Copy_html_views);
function task_Copy_html_views() {
  return gulp.src([routeSources.html_views.path])
      .pipe(gulpFlatten({ includeParents: 1 }))
      .pipe(gulp.dest(routeSources.html_views.dist));
}

Und dort sehen Sie die Dokumentation zu gulp-flatten: Link

AlejandroJSR7
quelle
-3
   gulp.task('move-css',function(){
      return gulp
                  .src([ 'source/**'], { base: './' })
                  .pipe(gulp.dest('./public/assets/css/'));
    });

Ihr eigener Code enthielt beim Aufrufen nicht den gesamten Verzeichnisbaum der Quelle 'source/**'und der Basis {base:'./'}, gulp.srcwodurch die Funktion fehlschlug. Die anderen Teile waren in Ordnung.

gulp.task('move-css',function(){
  return gulp.src([
    './source/css/one.css',
    './source/other/css/two.css'

    ]).pipe(gulp.dest('./public/assets/css/'));
});
Kingsolo50
quelle
SO runzelt nur bei Antworten die Stirn. Um künftigen Besuchern zu helfen, dieses Wissen zu erlernen und auf ihre eigenen Probleme anzuwenden, und um die Wahrscheinlichkeit von Upvotes zu erhöhen, sollten Sie Erklärungen hinzufügen und Haustiere Ihrer Antwort hervorheben, die sich mit dem Problem von OP befassen, zu Ihren Antworten.
SherylHohman