GULP

GULPのまとめ

実際に使っているgulpfile.jsをシェアします。

この記事の目次
  1. gulpfile.js
  2. プラグイン
  3. ファイルパス
  4. SASS
  5. JavaScript
  6. 画像の最適化
  7. HTML
  8. 変更を監視
  9. キャッシュの削除
  10. プロジェクトファイルのzip化
  11. distフォルダの中身の削除
  12. 個々のタスクをエクスポート
  13. gulpコマンドで起動させる

実際に使っているgulpfile.jsをシェアします。

gulpfile.js

プラグイン

// common
const gulp = require('gulp');
const { series, parallel, dest } = require('gulp');
const browserSync = require('browser-sync').create();
const rename = require('gulp-rename');
const plumber = require('gulp-plumber'); //監視ストップをしないようにする

// optional
const zip = require('gulp-zip'); //zip化
const del = require('del'); //distの中身削除

// css
const sass = require('gulp-sass')(require('sass'));
const sourcemaps = require('gulp-sourcemaps');
const cssnano = require('gulp-cssnano');
const autoprefixer = require('gulp-autoprefixer');
// JS
const uglify = require('gulp-uglify');
const concat = require('gulp-concat');
const babel = require('gulp-babel');
// img
const imagemin = require('gulp-imagemin');
const cache = require('gulp-cache');
// html
const kit = require('gulp-kit');
const htmlmin = require('gulp-htmlmin');

変数部分です。
それぞれインストールする必要があります。

参考記事
GULPの始め方
GULPでミニファイ化したファイルにminの接尾字をつける方法(gulp-rename)
GULPでLESSの変更を検知する方法

ファイルパス

// ファイルのパス
filesPath = {
  sass: './src/sass/**/*.scss',
  js: './src/js/**/*.js',
  images: './src/img/**/*.+(png|jpg|jpeg|gif|svg)',
  html: './html/**/*.kit',
};

パスをまとめて指定しておくと記述がスッキリします。

SASS

// SASS
function sassTask() {
  return (
    gulp
      .src([filesPath.sass, '!./src/sass/not-compile.scss'])
      .pipe(plumber()) // errorによる監視のストップ防止
      .pipe(sourcemaps.init()) //sourcemaps starts
      .pipe(sass()) //compile
      .pipe(autoprefixer()) //prefix
      .pipe(cssnano()) //minify
      .pipe(sourcemaps.write('.')) //sourcemaps ends
      .pipe(
        rename(path => {
          // mapファイルにはminをつけたくないので。
          if (!path.extname.endsWith('.map')) {
            path.basename += '.min';
          }
        })
      )
      .pipe(dest('./dist/css'))
  );
}

参考記事
GULPでautoprefixerを使う方法(エラーの対応方法)
GULPでCSSをミニファイ化する方法(gulp-cssnano)
GULP でSASSをコンパイルする方法

JavaScript

// JavaScript
function jsTask() {
  return (
    gulp
      .src(filesPath.js)
      .pipe(plumber()) // errorによる監視のストップ防止
      .pipe(
        babel({
          presets: ['@babel/env'],
        })
      )
      .pipe(concat('project.js'))
      .pipe(uglify()) //minify
      .pipe(
        rename({
          suffix: '.min',
        })
      )
      .pipe(dest('./dist/js'))
  );
}

参考記事

GULPでJavaScriptとトランスパイルする方法(gulp-babel)
GULPで複数のJavaScriptファイルをまとめる方法(gulp-concat)
GULPでJavaScriptをミニファイ化する方法(gulp-uglify)

画像の最適化

// Images optimization
function imagesTask() {
  return gulp
    .src(filesPath.images)
    .pipe(cache(imagemin())) //imageを最適化、キャッシュを利用
    .pipe(dest('./dist/img/'));
}

参考記事
GULPで画像イメージを圧縮して最適化する方法とキャッシュコントロール

HTML

// HTML kit templating
function kitTask() {
  return gulp
    .src(filesPath.html)
    .pipe(plumber()) // errorによる監視のストップ防止
    .pipe(kit()) //kitファイルをまとめる
    .pipe(
      htmlmin({//htmlをミニファイ化
        collapseWhitespace: true, //スペースを削除
      })
    )
    .pipe(dest('./'));
}

GULPでHTMLをミニファイ化(最適化)する方法(gulp-htmlmin)
GULPでkitファイルを効率よく使う方法(gulp-kit)

変更を監視

// Watch changes and browser-sync
function watch() {
  // browser-sync
  browserSync.init({
    server: {
      baseDir: './', //index.htmlをrootにおいている場合。
    },
    browser: 'google chrome',
  });
  // watch
  gulp.watch(filesPath.sass, sassTask).on('change', browserSync.reload);
  gulp.watch(filesPath.js, jsTask).on('change', browserSync.reload);
  gulp.watch(filesPath.html, kitTask).on('change', browserSync.reload);
  gulp.watch(filesPath.images, imagesTask).on('change', browserSync.reload);
}

GULPでSASSやHTMLの変更を検知してブラウザを自動でリロードさせる方法

キャッシュの削除

// キャッシュのクリア
function clearCache() {
  return cache.clearAll();
}

プロジェクトファイルのzip化

// Zip化
function zipTask() {
  return gulp
    .src(['./**/*', '!./node_modules/**/*'])
    .pipe(zip('project.zip'))
    .pipe(gulp.dest('./'));
}

distフォルダの中身の削除

// Clean 'dist' folder
function clean() {
  return del(['./dist/**/*']);
}

個々のタスクをエクスポート

// Gulp individual tasks
exports.sassTask = sassTask;
exports.jsTask = jsTask;
exports.imagesTask = imagesTask;
exports.kitTask = kitTask;
exports.watch = watch;
exports.clearCache = clearCache;
exports.zipTask = zipTask;
exports.clean = clean;

gulpコマンドで起動させる

// Gulp serve
exports.build = parallel(sassTask, jsTask, imagesTask, kitTask);

// Gulp default
exports.default = series(exports.build, watch);

それぞれのタスクはどの順番で実行されてもいいのでparallelを使います。
しかしwatchは、それぞれのタスクが一度実行された後に実行されてほしいのでparallelではなくseriesを使います。
参考記事
gulp.seriesとgulp.parallelの違い
GULPでgulpコマンドのデフォルトの設定する方法