web-dev-qa-db-ja.com

Gulpで複数のファイルをコピーしてフォルダー構造を保持する方法

Gulpを使用して、あるフォルダーから別のフォルダーにファイルをコピーしようとしています。

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

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

上記のコードは、one.csstwo.csspublic/assets/cssフォルダーにコピーしています。

そして、gulp.src('./source/css/*.css')を使用すると、すべてのCSSファイルがpublic/assets/cssフォルダーにコピーされますが、これは望んでいないものです。

複数のファイルを選択してフォルダー構造を保持するにはどうすればよいですか?

70
NullPoiиteя

これを実現するには、baseを指定してください。

¶base -cwdに相対的なフォルダーを指定します。デフォルトは、globが始まる場所です。これは、.dest()に保存するときにファイル名を決定するために使用されます


あなたの場合は次のようになります:

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

フォルダー構造:

|-gulpfile.js
|-source
|   |-css
|   |-other
|      |-css
|-public
|   |-assets
126
Anulal S

Gulp-flattenを使用し、この構成を使用します。

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

そして、gulp-flattenに関するドキュメントを見ることができます: Link

2
AlejandroJSR7