- gulp モジュールのインストール
npm install --save-dev [--proxy http://192.168.0.7:3128/] module1-name module2-name module3-name
proxy がある場合には --proxy でプロキシを指定する
- 主なgulpモジュール
gulp gulp-util gulp-load-plugins run-sequence gulp-concat gulp-rename gulp-plumber del gulp-newer
gulp-changed gulp-cached gulp-if gult-filter merge-stream gulp-save require-dir
// yargs
// html
gulp-htmlhint gulp-minify-html gulp-html-validator gulp-html-prettify
// gulp-htmlmin :: gulp-jade gulp-ejs
// javascript
gulp-eslint gulp-uglify gulp-coffee gulp-coffeelint
// gulp-jshint
// CSS
gulp-csslint gulp-cssmin gulp-minify-css gulp-uncss autoprefixer-core gulp-postcss
// gulp-csso(minify)
// CSS preprocessor
gulp-stylus gulp-less gulp-ruby-sass gulp-sass gulp-compass gulp.spritesmith gulp-csscomb gulp-stylestats
// json
gulp-json-lint gulp-jsonminify
// image
gulp-imagemin gulp-svgmin
// compression, sitemap
gulp-gzip gulp-zip gulp-sitemap
// browser
gulp-bower gulp-webpack gulp-browserify browser-sync gulp-livereload
// gulp-babel
// git
gulp-git gulp-git-watch
// misc
gulp-cache sw-precache gulp-notify gulp-header gulp-footer gulp-sourcemaps gulp-diff vinyl-paths
gulp-remember gulp-size gulp-useref gulp-replace
- モジュールを一括して読み込む
但し 使用しないモジュールが多数あると最初の読み込みに時間が掛る
gulp-load-plugins モジュールを使用する
var $ = require('gulp-load-plugins')({
pattern: ['gulp-*', 'gulp.*'],
replaceString: /\bgulp[\-.]/,
lazy: true,
rename: {
'gulp-json-lint': 'jsonLint',
'gulp-ruby-sass': 'sass',
'gulp-minify-html': 'minifyHtml',
'gulp-html-prettify': 'prettify',
'gulp-html-validator': 'htmlValidator'
}
});
- gulpディレクトリにtask別のファイルを作成管理する
require-dirを使用し、サブディレクリにtask毎のファイルを作成する事で
gulpfile.jsを分割管理する、管理メンテナンスが楽になる。
gulpfile.js は 下記の2行だけにする
var requireDir = require('require-dir');
requireDir('./gulp/tasks', { recurse: true });
gulp/tasks ディレクトリに task別のファイルを作成する
gulp/config.js に共通するflag 等を設定すると便利
gulp
config.js
eslint.json
tasks/main.js
lib.js
...
タスク名とファイル名を同一にすると分かり易い、関連するタスクなどが複数あってもOK
/** gulp/tasks/main.js **/
var gulp = require('gulp');
var $ = require('gulp-load-plugins')({
pattern: ['gulp-*', 'gulp.*'],
replaceString: /\bgulp[\-.]/,
lazy: true
});
var config = require('../config');
gulp.task('main', function(){
...
/** gulp/config.js **/
module.exports = {
// sitemap URL
SiteName: 'http://dac01.sakura.ne.jp/',
// false:: all-renewal
newFlag: true,
...
- 引数の利用
引数で開発用とリリース用の処理を分る場合など
gulp js --release
引数を処理する方法
1) process.argv を使う
2) yargs モジュールを使う
3) gulp-util モジュールを使う
/** test.js **/
var gulp = require('gulp');
var util = require('gulp-util');
var argv = require('yargs').argv;
gulp.task('test', function () {
console.log("Arg Process:", process.argv);
console.log("Arg yargs:",argv);
console.log("Arg util :",util.env);
});
gulp test --aa 11 --bb
Arg Process: [ 'node', '/bin/gulp', 'test', '--aa', '11', '--bb' ]
Arg yargs: { _: [ 'test' ], aa: 11, bb: true, '$0': '/bin/gulp' }
Arg util : { _: [ 'test' ], aa: 11, bb: true }
- return のない場合
return のない場合にはtaskの呼出元と並行処理する
あるtaskの終了を待って次の処理をする場合には return を付ける
gulp.task('jslint', function () {
return gulp.src(src)
.pipe(...)
gulp.task('js',['jslint'], function () {
- 処理するtaskの順序を指定する
A:aa_task 終了後に 次の処理を実行する
gulp.task('build',['aa_task'],function () {
gulp.src('js/*.js')
.pipe(...)
...
});
B:run-sequence モジュールを使用する
var runSequence = require('run-sequence');
gulp.task('build',['aa_task'],function () {
runSequence('bb_task',['xx_task','yy_task'],'cc_task');
aa_task,bb_task,['xx_task','yy_task'],cc_taskの順に処理する
xx_task,yy_task 等の配列内は並行処理する
aa_task 等のtaskは必ず return で stream又はコールバックを返す事
- ファイル更新時にブラウザを自動更新する
A:gulp-livereload モジュールを使用する(Chromeのみ)
処理の最後で livereload モジュールを実行する
.pipe($.livereload());
B:browser-sync モジュールを使用する
var browserSync = require("browser-sync").create();
- 処理するファイルの順序を指定する
処理するファイルの順序を指定する場合は配列でファイルを指定する
var src = ['js1/main.js','js1/libzmenu.js','js1/fontmenu.js'];
gulp.src(src)
順序を指定しない場合
var src =['js/*.js','!js/test.js']; ! と次の文字の間にはスペース等は入れない
- どのファイルを処理しているかを表示する
gulp-printを使用する
gulp-newer 等でどのファイルが更新処理されているかを表示する場合など
.pipe($.if(config.newFlag, $.newer(paths.DestJson)))
.pipe($.print (function(filepath) { return 'Newer :' + filepath; }))
...
- default でusage を表示させる
毎日使わない場合やtaskの数が多い場合などには便利
var usage = ['Usage: gulp [ json | html | js | css | sitemap | help ]',
' json : check json-files',
' html : check html',
' js : check js and copy',
' css : check css and copy',
' sitemap : create all sitemap.xml'
];
gulp.task('help', function () {
console.log(usage.join('\n'));
});
gulp.task('default',['help']);