これからはじめるGulp #14:gulp-cachedプラグインで変更されたSCSSファイルだけを処理させる
はじめに
前回のこれからはじめるGulp(13):gulp-changedプラグインで変更されたファイルだけを処理させるでgulp-changedプラグインを使った画像処理の効率化を試しました。今回はgulp-cachedというプラグインを活用しSassタスクの処理を効率化してみます。
gulp-cachedについて
gulp-cachedはGlob上のファイルをメモリにキャッシュし、変更されたファイルだけを対象に処理させることができます。
gulp-cachedをSassタスクに組み込む
gulp-cachedをSassタスクに組み込んでみます。
gulp-cachedのインストール
$ sudo npm install gulp-cached --save-dev Password: gulp-cached@1.0.1 node_modules/gulp-cached ├── lodash.defaults@2.4.1 (lodash._objecttypes@2.4.1, lodash.keys@2.4.1) └── through2@0.5.1 (xtend@3.0.0, readable-stream@1.0.33)
Sassタスクにgulp-cachedを指定する
追加するのは読み込みとパイプラインへの指定だけなのでとても簡単に組み込めます。gulp-cachedの引数にはキャッシュ名を指定するだけです。
var gulp = require('gulp'); var path = require('path'); var sass = require('gulp-ruby-sass'); var plumber = require('gulp-plumber'); var notify = require('gulp-notify'); var cache = require('gulp-cached'); //<- var browserSync = require('browser-sync'); var reload = browserSync.reload; //option var paths = { srcDir : 'assets/_scss', dstDir : 'assets/css' } //task gulp.task('sass', function(){ var srcGlob = paths.srcDir + '/**/*.scss'; var dstGlob = paths.dstDir; var errorMessage = "Error: <%= error.message %>"; var sassOptions = { bundleExec : true, style : 'compressed', require : ['bourbon', 'neat'], loadPath : [ 'vendor/bundle/ruby/2.1.0/gems/bitters-0.10.1/app/assets/stylesheets' ] } gulp.src( srcGlob ) .pipe(cache( 'sass' )) //<- .pipe(plumber({ errorHandler: notify.onError( errorMessage ) })) .pipe(sass( sassOptions )) .pipe(gulp.dest( dstGlob )) .pipe(reload({stream:true})); });
gulp-cachedを実行
watchが設定されている状態でタスクを実行します。 最初の実行で複数のSCSSファイルが処理されていますが、後半のwatchが行われている部分では変更されたファイルのみが処理されています。
$ gulp watch [17:00:28] Using gulpfile ~/Projects/test.io/vccw/www/wordpress/wp-content/themes/test.io/gulpfile.js [17:00:28] Starting 'sass'... [17:00:28] Finished 'sass' after 20 ms [17:00:28] Starting 'watch'... [17:00:28] Finished 'watch' after 51 ms [17:00:29] gulp-ruby-sass: directory [17:00:30] gulp-ruby-sass: write common.css write common.css.map [17:00:30] gulp-ruby-sass: directory sections [17:00:31] gulp-ruby-sass: write sections/categories-archive.css write sections/categories-archive.css.map [17:00:31] gulp-ruby-sass: write sections/date-archives.css write sections/date-archives.css.map [17:00:32] gulp-ruby-sass: write sections/home.css write sections/home.css.map [17:00:32] gulp-ruby-sass: write sections/post.css write sections/post.css.map [17:00:33] gulp-ruby-sass: write sections/tags-archive.css write sections/tags-archive.css.map [17:00:41] Starting 'sass'... [17:00:41] Finished 'sass' after 13 ms [17:00:45] Starting 'sass'... [17:00:45] Finished 'sass' after 2.64 ms [17:01:02] Starting 'sass'... [17:01:02] Finished 'sass' after 2.51 ms [17:01:02] gulp-ruby-sass: directory [17:01:04] gulp-ruby-sass: write common.css write common.css.map [17:01:13] Starting 'sass'... [17:01:13] Finished 'sass' after 4.11 ms [17:01:14] gulp-ruby-sass: directory [17:01:15] gulp-ruby-sass: write common.css write common.css.map [17:01:22] Starting 'sass'... [17:01:22] Finished 'sass' after 2.91 ms [17:01:23] gulp-ruby-sass: directory [17:01:25] gulp-ruby-sass: write common.css write common.css.map [17:01:30] Starting 'sass'... [17:01:30] Finished 'sass' after 10 ms [17:01:31] gulp-ruby-sass: directory sections [17:01:32] gulp-ruby-sass: write sections/post.css write sections/post.css.map [17:01:36] Starting 'sass'... [17:01:36] Finished 'sass' after 4.29 ms [17:01:37] gulp-ruby-sass: directory sections [17:01:37] gulp-ruby-sass: write sections/post.css write sections/post.css.map
これでファイルを変更する度にすべてのSCSSファイルがコンパイルされることもなくなります。無駄な処理が減り、コンパイルが完了するまでの待機時間を減らすことができます。タスクの効率化はひとまずここまで。明日からは画像処理系のプラグインを紹介していきたいと思います。
この記事はこれからはじめるGulp(14):gulp-cachedプラグインで変更されたSCSSファイルだけを処理させるの転載です。