wordpressのtheme開発を自動化するgulpの設定

wordpressのテーマを作成する際、sassのプリコンパイルやブラウザのリロードをgulpでやると便利なので備忘録として設定を残しておく。

gulpとは様々なタスクを自動化するビルドシステムである。

ここで紹介するgulpのビルドレシピは次のことを自動で行う。

  • sassやJavascriptの変更を検知し、自動的にコンパイル・minifyを行う
  • css, js, phpファイルの変更を検知し、ブラウザを更新する
  • browser-syncを利用することで、ページ遷移、スクロール、フォームへの入力をブラウザ間で同期する

gulpのインストール方法はここでは説明しない。ググってくれ。

gulpの設定はこんなん。

// Load plugins
var gulp = require('gulp'),
  plugins = require('gulp-load-plugins')({ camelize: true }),
  browserSync = require('browser-sync');

// Styles
gulp.task('styles', function() {
  return gulp.src('assets/styles/*.scss')
  .pipe(plugins.rubySass({ sourcemap: true, compass: true }))
  .pipe(plugins.autoprefixer('last 2 versions', 'ie 9', 'ios 6', 'android 4'))
  .pipe(gulp.dest('assets/styles/build'))
  .pipe(plugins.minifyCss({ keepSpecialComments: 1 }))
  .pipe(gulp.dest('./'))
  .pipe(browserSync.reload( { stream: true } ))
  .pipe(plugins.notify({ message: 'Styles task complete' }));
});

// Site Scripts
gulp.task('scripts', function() {
  return gulp.src(['assets/scripts/*.js'])
  .pipe(plugins.plumber())
  .pipe(plugins.jshint('.jshintrc'))
  .pipe(plugins.jshint.reporter('default'))
  .pipe(plugins.concat('main.js'))
  .pipe(gulp.dest('assets/scripts/build'))
  .pipe(plugins.rename({ suffix: '.min' }))
  .pipe(plugins.uglify())
  .pipe(gulp.dest('scripts'))
  .pipe(browserSync.reload( { stream: true } ))
  .pipe(plugins.notify({ message: 'Scripts task complete' }));
});


gulp.task('bower', function() {
  plugins.bowerFiles()
  .pipe(gulp.dest('./js/vendor'));
});

// Images
gulp.task('images', function() {
  return gulp.src('assets/images/**/*')
  .pipe(plugins.plumber())
  .pipe(plugins.cache(plugins.imagemin({ optimizationLevel: 7, progressive: true, interlaced: true })))
  .pipe(gulp.dest('assets/images'))
  .pipe(browserSync.reload( { stream: true } ))
  .pipe(plugins.notify({ message: 'Images task complete' }));
});

gulp.task('php', function() {
  return gulp.src('**/*.php')
  .pipe(browserSync.reload( { stream: true } ))
  .pipe(plugins.notify({ message: 'PHP task complete' }));
});

// browser-sync
gulp.task('bs', function() {
  browserSync({
    proxy: "192.168.33.10", // ここにwordpressサーバへのIPアドレスを書く
    minify: false
  });
});


// Watch
gulp.task('watch', function() {
  // Watch .scss files
  gulp.watch('assets/styles/**/*.scss', ['styles']);

  // Watch .js files
  gulp.watch('assets/scripts/**/*.js', ['plugins', 'scripts']);

  // Watch image files
  gulp.watch('assets/images/**/*', ['images']);

  // Watch image files
  gulp.watch('./**/*.php', ['php']);
});

// Default task
gulp.task('default', ['styles', 'scripts', 'images', 'bower', 'watch', 'bs']);
このエントリーをはてなブックマークに追加