gulpfile.jsの設定

  1. モジュールのインストール
  2. 主なモジュール
  3. モジュールを一括して読み込む
  4. gulpディレクトリにtask別のファイルを作成管理する
  5. 引数の利用
  6. return のない場合
  7. 処理するtaskの順序を指定する
  8. ファイル更新時にブラウザを自動更新する
  9. 処理するファイルの順序を指定する
  10. どのファイルを処理しているかを表示する
  11. default でusage を表示させる

  1. gulp モジュールのインストール
  2.   npm install --save-dev [--proxy http://192.168.0.7:3128/] module1-name module2-name module3-name
      proxy がある場合には --proxy でプロキシを指定する
    
  3. 主なgulpモジュール
  4. 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
    
  5. モジュールを一括して読み込む
  6. 但し 使用しないモジュールが多数あると最初の読み込みに時間が掛る
    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'
      	 } 
    });
    
  7. gulpディレクトリにtask別のファイルを作成管理する
  8. 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,
    	...
    
    
  9. 引数の利用
  10.  引数で開発用とリリース用の処理を分る場合など
     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 }
    
  11. return のない場合
  12. return のない場合にはtaskの呼出元と並行処理する
     あるtaskの終了を待って次の処理をする場合には return を付ける
    
      gulp.task('jslint', function () {
          return gulp.src(src)
                 .pipe(...)
    
      gulp.task('js',['jslint'], function () {
    
    
  13. 処理するtaskの順序を指定する
  14. 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又はコールバックを返す事
    
  15. ファイル更新時にブラウザを自動更新する
  16. A:gulp-livereload モジュールを使用する(Chromeのみ)
    	処理の最後で livereload モジュールを実行する
    	.pipe($.livereload());
    
    B:browser-sync モジュールを使用する
       var browserSync = require("browser-sync").create();
       
    
  17. 処理するファイルの順序を指定する
  18. 処理するファイルの順序を指定する場合は配列でファイルを指定する
    	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; }))
    	...
    
  19. default でusage を表示させる
  20. 毎日使わない場合や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']); 
    

to Top
to IndexPage

First Release:2015-05-31