gulp basic setting
/** | |
* 汎用Gulpfile | |
* | |
* @author Seiji Ogawa [****@****.**.**] | |
* @copyright ***** 2015 | |
*/ | |
/** | |
* モジュール読み込み | |
*/ | |
// base | |
var gulp = require('gulp'); | |
var notify = require('gulp-notify'); // デスクトップ通知 | |
var plumber = require("gulp-plumber"); // エラー時に処理を停止させない | |
var rename = require('gulp-rename'); // ファイル名変更 | |
// html | |
var ejs = require('gulp-ejs'); // ejsテンプレートコンパイル | |
// css | |
var compass = require('gulp-compass'); // compass+sass | |
var cssmin = require('gulp-cssmin'); // cssミニファイ | |
// js | |
var jshint = require('gulp-jshint'); // js構文チェック | |
var coffee = require('gulp-coffee'); // coffee script | |
var uglify = require('gulp-uglify'); // js難読化 | |
/** | |
* 設定 | |
* | |
*/ | |
// 各種パス | |
// `AをBにする` → `a_b`というネーミングにする | |
var config = { | |
ejs_html: { | |
src: ['src/ejs/**/*.ejs', '!src/ejs/**/_*.ejs'], | |
dest: 'src/', | |
}, | |
sass_css: { | |
src: ['src/sass/**/*.scss', '!src/sass/**/_*.scss'], | |
dest: 'src/css/', | |
compass: { | |
sass: 'src/sass/', | |
css: 'src/css/', | |
style: 'expanded' | |
} | |
}, | |
css_minify: { | |
src: ['src/css/**/*.css', '!src/css/**/*.min.css'], | |
dest: 'src/css', | |
}, | |
js_jshint: { | |
src: 'src/js/**/*.js', | |
}, | |
coffee_js: { | |
src: ['src/coffee/**/*.coffee'], | |
dest: 'src/js' | |
}, | |
js_uglify: { | |
src: ['src/js/**/*.js', '!src/js/**/*.min.js'], | |
dest: 'src/js', | |
} | |
}; | |
/** | |
* タスク設定 | |
*/ | |
// ウォッチ | |
gulp.task('default', function() { | |
gulp.watch(config.ejs_html.src[0], ['ejs_html']); | |
gulp.watch(config.sass_css.src[0], ['sass_css']); | |
gulp.watch(config.coffee_js.src, ['coffee_js']); | |
gulp.watch(config.js_jshint.src, ['js_jshint']); | |
}); | |
// リリース用タスク | |
gulp.task('release', [ | |
'ejs_html', | |
'sass_css', | |
'coffee_js', | |
'css_minify', | |
'js_uglify', | |
'file_copy' | |
], function (config) { | |
console.log(' - DONE -'); | |
}); | |
// ejsをコンパイル | |
gulp.task('ejs_html', function () { | |
var conf = config.ejs_html; | |
return gulp.src(conf.src) | |
.pipe(plumber({ | |
errorHandler: notify.onError('Error: <%= error.message %>') | |
})) | |
.pipe(ejs()) | |
.pipe(gulp.dest(conf.dest)); | |
}); | |
// scssをcssにコンパイル | |
gulp.task('sass_css', function () { | |
var conf = config.sass_css; | |
return gulp.src(conf.src) | |
.pipe(plumber({ | |
errorHandler: notify.onError('Error: <%= error.message %>') | |
})) | |
.pipe(compass({ | |
config_file: './config.rb', | |
sass: conf.compass.sass, | |
css: conf.compass.css, | |
style: conf.compass.style | |
})) | |
.pipe(gulp.dest(conf.dest)); | |
}); | |
// cssを軽量化(Minify) | |
gulp.task('css_minify', function () { | |
var conf = config.css_minify; | |
return gulp.src(conf.src) | |
.pipe(plumber({ | |
errorHandler: notify.onError('Error: <%= error.message %>') | |
})) | |
.pipe(cssmin()) | |
.pipe(rename({ | |
suffix: '.min' | |
})) | |
.pipe(gulp.dest(conf.dest)); | |
}); | |
// jsファイルの構文チェック | |
gulp.task('js_jshint', function () { | |
var conf = config.js_jshint; | |
return gulp.src(conf.src) | |
.pipe(plumber({ | |
errorHandler: notify.onError('Error: <%= error.message %>') | |
})) | |
.pipe(jshint()) | |
.pipe(jshint.reporter()); | |
}); | |
// coffeeをコンパイルしてjs化 | |
gulp.task('coffee_js', function () { | |
var conf = config.coffee_js; | |
return gulp.src(conf.src) | |
.pipe(plumber({ | |
errorHandler: notify.onError('Error: <%= error.message %>') | |
})) | |
.pipe(coffee()) | |
.pipe(gulp.dest(conf.dest)); | |
}); | |
// jsファイルを難読化(uglify+rename) | |
gulp.task('js_uglify', function () { | |
var conf = config.js_uglify; | |
return gulp.src(conf.src) | |
.pipe(plumber({ | |
errorHandler: notify.onError('Error: <%= error.message %>') | |
})) | |
.pipe(uglify()) | |
.pipe(rename({ | |
suffix: '.min' | |
})) | |
.pipe(gulp.dest(conf.dest)); | |
}); | |
// ファイルをコピー | |
gulp.task('file_copy', function() { | |
return gulp.src( | |
[ 'src/*.html', 'src/css/*.min.css', 'src/js/*.min.js', 'src/img/**' ], | |
{ base: 'src' } | |
) | |
.pipe(gulp.dest('dist')); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
以下の構造を想定
gulp releaseでdistに入る仕組み。