gulpで@importを解析して更新されたsassだけビルドしてみた
わたしの職場でgulpが導入されて2年くらいかな。
見よう見まねでコピペで作ったシンプルなやつを使ってたんですが、ファイル数が増えてビルドに時間がかかるようになってきたのでなんとかしなくてはとsass-chachedを導入してみることにしました。
けどimportしてるものとかは自動ではやってくれないのね。
どうにかなんないかな〜と思って調べてこの記事を見つけたので、こちらを参考に作成してみることにしました。
よくわからぬままなんとか動くようにしたのがこちら。
初回はただ普通に全部のファイルをビルドするようにしてます。
var gulp = require("gulp"); var sass = require("gulp-sass"); var pleeease = require("gulp-pleeease"); var plumber = require("gulp-plumber"); var path = require("path"); var foreach = require ("gulp-foreach"); var cache = require("gulp-cached"); var grapher = require ("sass-graph"); var gulpif = require("gulp-if"); var through = require("through2"); var watching = false; // Task gulp.task("min", function() { //sass gulp.watch(dirSass.src, ["sass-min"]); }); // Min gulp.task("sass-min", function(){ var graph = grapher.parseDir("../scss/"); var all = new Array(); gulp.src(dirSass.src) .pipe(plumber()) .pipe(cache("sass")) .pipe(gulpif(watching, foreach(function(stream, file){ all.push(file.path); graph.visitAncestors(file.path, function(f) { if(all.indexOf(f) < 0){ all.push(f); } }); return gulp.src(all); }))) .pipe(through.obj(function(n, enc, done){ watching = true; done(null, n); })) .pipe(sass()) .pipe(pleeease()) .pipe(gulp.dest("../css/")); });
foreachしないと動かないのだろうか〜?
これから実務で使って修正していく予定です。
他に参考にさせていただいたサイト。
.pipeでfunction書くやつ。
omachizura.com