Gulp, EJS, SASS, browser-syncのgulpfileサンプル

HTML、CSSコーディング作業で使用している私のgulpfileのサンプルを置いておく。

"use strict"

const gulp = require('gulp')
const sass = require('gulp-sass') //scssコンパイル
const autoprefixer = require("gulp-autoprefixer")//べンダープレフィックス
const sassGlob = require("gulp-sass-glob")//import文を短くまとめる
const cleanCSS = require('gulp-clean-css')//cssフォーマッタ
const notify = require('gulp-notify') //エラーを通知
const plumber = require('gulp-plumber') //watch中にエラー防止
const sourcemaps = require('gulp-sourcemaps')//ソースマップ
const  ejs = require("gulp-ejs") //EJS
const rename = require('gulp-rename')//リネーム
const replace = require("gulp-replace")//置換
const browserSync = require("browser-sync")//自動リロード
const del = require('del')//削除

// paths
const paths = {
  src: 'src',
  dist: 'dist'
}

//scssコンパイル
gulp.task("sass", () => {
    return gulp.src(paths.src + "/scss/style.scss")
      .pipe(plumber({ errorHandler: notify.onError("Error: <%= error.message %>") }))
      .pipe(sourcemaps.init())
      .pipe(sassGlob())
      .pipe(sass())
      .pipe(autoprefixer({
        grid: true
      }))
      .pipe(cleanCSS({format: 'beautify'}))
      .pipe(sourcemaps.write(paths.dist + "/css"))
      .pipe(gulp.dest(paths.dist + "/css"))
      .pipe(notify({
        title: 'Sassをコンパイルしました。',
        message: new Date(),
        sound: 'Tink',
    }))
})

//EJS
gulp.task("ejs", () => {
    return gulp.src([paths.src + "/ejs/**/*.ejs", "!" + paths.src + "/ejs/**/_*.ejs"])
    .pipe(ejs({}, {}, {ext:'.html'}))
    .pipe(rename({ extname: ".html" }))
    .pipe(replace(/[\s\S]*?(<!DOCTYPE)/, "$1"))
    .pipe(gulp.dest(paths.dist))
    .pipe(notify({
      title: 'EJSをコンパイルしました。',
      message: new Date(),
      sound: 'Tink',
  }))
})

// server
gulp.task('browser-sync', () => {
    return browserSync.init({
        server: {
            baseDir: paths.dist
        },
        port: 4000,
        reloadOnRestart: true
    })
})

// reload
gulp.task("reload", done => {
  browserSync.reload()
  done()
})

// clean
gulp.task('clean', (done) => {
  del(paths.dist + '/**/*');
  done();
});

// watch
gulp.task("watch", done => {
  gulp.watch(paths.src + "/scss/**/*.scss", gulp.series('sass', 'ejs', 'reload'))
  gulp.watch(paths.src + "/ejs/**/*.ejs", gulp.series('ejs', 'reload'))
  done()
})

// gulp
gulp.task('default',
  gulp.parallel('watch', 'browser-sync')
)

// build
gulp.task('build',
    gulp.series('clean',
        gulp.series('sass',
            gulp.series('ejs',)))
)

コメント