第5章 現場で使える実践Sassテクニック

5-4 gulpのタスクを追加してもっと便利な環境にする

npm install

glob でパーシャルファイルを一括で読み込む

@import "components/headings";
@import "components/texts";
@import "components/lists";
@import "components/buttons";
@import "components/images";
npm install --save-dev gulp-sass-glob
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassGlob = require('gulp-sass-glob'); //①「gulp-sassglob」を読み込み

gulp.task('sass', function() {
  return gulp.src('./sass/**/*.scss')
    .pipe(sassGlob()) //②「sass」の前に指定
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(gulp.dest());
});
@import "components/**";

ソースマップでコンパイル前のソースの場所を知る

npm install --save-dev gulp-sourcemaps
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassGlob = require('gulp-sass-glob');
var sourcemaps = require('gulp-sourcemaps'); //①「gulp-sourcemaps」を読み込み

gulp.task('sass', function() {
  return gulp.src('./sass/**/*.scss')
    .pipe(sourcemaps.init()) //②「gulp.src」の直後に指定
    .pipe(sassGlob())
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(sourcemaps.write()) //③「gulp.dest」の直前に指定
    .pipe(gulp.dest('./css'));
});

ソースマップ書き出し

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2 ...(略)... IifQ== */

mapファイルの書き出し

    .pipe(sourcemaps.write('./css'))
/*# sourceMappingURL=../css/sample.css.map */

エラー時にWatch を停止させずに自動コンパイルを継続させる

npm install --save-dev gulp-plumber
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassGlob = require('gulp-sass-glob');
var sourcemaps = require('gulp-sourcemaps');
var plumber = require('gulp-plumber'); //①「gulpplumber」を読み込み

gulp.task('sass', function() {
  return gulp.src('./sass/**/*.scss')
    .pipe(plumber()) //②「gulp.src」の直下に指定
    .pipe(sourcemaps.init())
    .pipe(sassGlob())
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(sourcemaps.write())
    .pipe(gulp.dest());
});

エラーに気付きやすくするために通知を出す

npm install --save-dev gulp-notify
var gulp = require('gulp');
var sass = require('gulp-sass');
var sassGlob = require('gulp-sass-glob');
var sourcemaps = require('gulp-sourcemaps');
var plumber = require('gulp-plumber');
var notify = require('gulp-notify'); //①「gulp-notify」を読み込み

gulp.task('sass', function() {
  return gulp.src('./sass/**/*.scss')
    .pipe(plumber({errorHandler: notify.onError("Error: <%= error.message %>")})) //②plumberの引数にエラーメッセージを設定
    .pipe(sourcemaps.init())
    .pipe(sassGlob())
    .pipe(sass({outputStyle: 'expanded'}))
    .pipe(sourcemaps.write())
    .pipe(gulp.dest());
});