全てのファイル操作を必要とするリビルド

リビルドが増えてくると、おそらくあなたは各ファイル全てをリビルドするのではなく、 リビルド済みのファイルをそのままにして、特定のファイルだけをリビルドしたいと考えるようになるでしょう。 例えば、あなたはlintとmodule-wrapを、変更があったファイルにだけ行うために、 それだけを他のlint済み且つmodule-wrap済みのファイルと連結したいと考えるでしょう。 一時ファイルを使用せずにこれを実現するのは困難です。

これを実現するために、gulp-cachedgulp-rememberを使用します。

var gulp = require('gulp');
var header = require('gulp-header');
var footer = require('gulp-footer');
var concat = require('gulp-concat');
var jshint = require('gulp-jshint');
var cached = require('gulp-cached');
var remember = require('gulp-remember');

var scriptsGlob = 'src/**/*.js';

gulp.task('scripts', function() {
  return gulp.src(scriptsGlob)
      .pipe(cached('scripts'))        // 変更されたファイルのみ通過させ、
      .pipe(jshint())                 // 変更されたファイルに特定の処理と
      .pipe(header('(function () {')) // 例). jshinting ^^^
      .pipe(footer('})();'))          // module-wrapの幾つかを実行し、
      .pipe(remember('scripts'))      // 再び全てのファイルをストリームに追加し、
      .pipe(concat('app.js'))         // 全てのファイルに対して必要な処理を実行します
      .pipe(gulp.dest('public/'));
});

gulp.task('watch', function () {
  var watcher = gulp.watch(scriptsGlob, ['scripts']); // scriptsタスク内のものと
  watcher.on('change', function (event) {             // 同じファイルを監視
    if (event.type === 'deleted') {                   // もし削除された場合は、
                                                      // それを忘れさせます
      delete cached.caches.scripts[event.path];       // gulp-cached remove api
      remember.forget('scripts', event.path);         // gulp-remember remove api
    }
  });
});

 Back to top

© 2010 - 2017 STUDIO KINGDOM