Gulpで開発用ディレクトリを構造を維持したままコピーする方法をメモ。
コピー
今回は以下のようなディレクトリで試してみます。
- develop(開発用ディレクトリ)
 - public(コピー先)
 
gulpfile.jsに以下のように記述して、ディレクトリ構造を維持したままコピーするようにします。
var gulp = require('gulp');
gulp.task('copy', function() {
  return gulp.src([
    // コピーするファイル
    'develop/**/*.*', '!develop/**/*.scss'
  ], {
    // コピー元ディレクトリ
    base: 'develop'
  })
    // コピー先ディレクトリ
  .pipe(gulp.dest('public'));
});
6行目の’develop/**/*.*’でdevelop内の全ファイルをコピー対象にして、’!develop/**/*.scss’で.scssファイルのみコピー対象から除外するようにしています。
以下のコマンドでコピーが実行されます。
gulp copy
削除
上記のコピーのみだと、開発用ディレクトリでファイルの削除を行った後にコピーを行った場合、publicディレクトリに削除したファイルが残ってしまいます。
publicディレクトリを削除してからコピーを行うようにしてみます。
delをインストールします。
npm install gulp del --save-dev
publicディレクトリを削除するタスクを追加します。
var gulp = require('gulp'),
del = require('del');
// publicディレクトリを削除
gulp.task('clean', del.bind(null, ['public']));
gulp.task('copy', function() {
  return gulp.src([
    // コピーするファイル
    'develop/**/*.*', '!develop/**/*.scss'
  ], {
    // コピー元ディレクトリ
    base: 'develop'
  })
    // コピー先ディレクトリ
  .pipe(gulp.dest('public'));
});
以下のコマンドを順に実行で、publicディレクトリを削除後にコピーを行います。
gulp clean gulp copy
直列処理
cleanとcopyを順々に行うタスクを追加してみます。
run-sequenceをインストールします。
npm install run-sequence --save-dev
buildという名前でタスクを追加します。
var gulp = require('gulp'),
del = require('del'),
runSequence = require('run-sequence');
// publicディレクトリを削除
gulp.task('clean', del.bind(null, ['public']));
gulp.task('copy', function() {
  return gulp.src([
    // コピーするファイル
    'develop/**/*.*', '!develop/**/*.scss'
  ], {
    // コピー元ディレクトリ
    base: 'develop'
  })
    // コピー先ディレクトリ
  .pipe(gulp.dest('public'));
});
// publicディレクトリ削除後に開発用ディレクトリをコピー
gulp.task('build', function(callback) {
  return runSequence('clean', 'copy', callback);
});
画像の圧縮など、コピー時にほかのタスクを実行したい場合は22行目に追加します。
以下のコマンドでbuildが実行されます。
gulp build
【参考サイト】
- gulp でディレクトリ構造を維持したコピー – アカベコマイリ
 - del
 - ファイルとフォルダの削除 | gulp 日本語リファレンス | js STUDIO
 - ファイル削除にはgulpプラグインを使わない – Qiita
 - run-sequence
 - Gulp でタスクを並列/直列処理する – Qiita
 - 【gulp】タスク内で run-sequence を使うなら気をつけること – 2noの日記
 - gulp の run-sequence を使うときは return を忘れずに – Qiita
 
コメントが承認されるまで時間がかかります。