前回のエントリーでGruntを紹介しましたが、最近は、gulpというツールのほうが使われているようです。
実は、Gruntを触ってみた時に、Gruntfile.jsの階層が深く、記述が冗長で分かりにくいように感じました(後出しでなんですが)。今回、gulpを調べてみると、その箇所が少し分かりやすくなったように思えます。というわけで、前回Gruntで試したことをgulpでもやってみることにしました。
今回、参考にしたサイトは下記サイト。
gulp.jsで始めるWeb開発爆速自動化入門:便利なGruntの弱点を補うgulp.jsのインストールと使い方 (1/3) – @IT
まずは、node.jsをインストールしてない場合は、インストール。
続いて、npmからグローバル環境とプロジェクトのディレクトリにgulpのインストール。それと、gulpのUglifyJSプラグインもインストール。
C:\Users\FMVF56DDRZ\Dropbox\gulp>npm install -g gulp gulp@3.8.8 node_modules\gulp ├── interpret@0.3.7 ├── pretty-hrtime@0.2.2 ├── deprecated@0.0.1 ├── archy@0.0.2 ├── minimist@1.1.0 ├── semver@3.0.1 ├── tildify@1.0.0 (user-home@1.1.0) ├── chalk@0.5.1 (ansi-styles@1.1.0, escape-string-regexp@1.0.2, supports-color@0.2.0, strip-ansi@ 0.3.0, has-ansi@0.1.0) ├── orchestrator@0.3.7 (stream-consume@0.1.0, sequencify@0.0.7, end-of-stream@0.1.5) ├── gulp-util@3.0.1 (lodash._reinterpolate@2.4.1, dateformat@1.0.8, through2@0.6.3, vinyl@0.4.3, lodash@2.4.1, multipipe@0.1.1, lodash.template@2.4.1) ├── liftoff@0.12.1 (extend@1.3.0, minimist@0.2.0, resolve@0.7.4, findup-sync@0.1.3) └── vinyl-fs@0.3.9 (graceful-fs@3.0.4, strip-bom@1.0.0, mkdirp@0.5.0, duplexer2@0.0.2, through2@0 .6.3, lodash@2.4.1, vinyl@0.4.3, glob-stream@3.1.15, glob-watcher@0.0.6) C:\Users\FMVF56DDRZ\Dropbox\gulp>npm install gulp gulp@3.8.8 node_modules\gulp ├── pretty-hrtime@0.2.2 ├── deprecated@0.0.1 ├── interpret@0.3.7 ├── archy@0.0.2 ├── tildify@1.0.0 (user-home@1.1.0) ├── minimist@1.1.0 ├── semver@3.0.1 ├── chalk@0.5.1 (escape-string-regexp@1.0.2, ansi-styles@1.1.0, supports-color@0.2.0, has-ansi@0. 1.0, strip-ansi@0.3.0) ├── orchestrator@0.3.7 (sequencify@0.0.7, stream-consume@0.1.0, end-of-stream@0.1.5) ├── vinyl-fs@0.3.9 (graceful-fs@3.0.4, strip-bom@1.0.0, mkdirp@0.5.0, through2@0.6.3, duplexer2@0 .0.2, vinyl@0.4.3, glob-watcher@0.0.6, lodash@2.4.1, glob-stream@3.1.15) ├── gulp-util@3.0.1 (lodash._reinterpolate@2.4.1, dateformat@1.0.8, lodash.template@2.4.1, throug h2@0.6.3, multipipe@0.1.1, vinyl@0.4.3, lodash@2.4.1) └── liftoff@0.12.1 (extend@1.3.0, minimist@0.2.0, resolve@0.7.4, findup-sync@0.1.3) C:\Users\FMVF56DDRZ\Dropbox\gulp>npm install gulp-uglify gulp-uglify@1.0.1 node_modules\gulp-uglify ├── deepmerge@0.2.7 ├── through2@0.6.3 (xtend@4.0.0, readable-stream@1.0.33-1) ├── gulp-util@3.0.1 (lodash._reinterpolate@2.4.1, dateformat@1.0.8, minimist@1.1.0, chalk@0.5.1, lodash.template@2.4.1, vinyl@0.4.3, multipipe@0.1.1, lodash@2.4.1) ├── vinyl-sourcemaps-apply@0.1.4 (source-map@0.1.40) └── uglify-js@2.4.15 (uglify-to-browserify@1.0.2, async@0.2.10, source-map@0.1.34, optimist@0.3.7 )
つづいて、下記のようなgulpfile.jsの作成
var gulp = require('gulp'); var uglify = require('gulp-uglify'); gulp.task("uglify", function() { return gulp.src(['sample01.js','sample02.js']) .pipe(uglify()) .pipe(gulp.dest("output.min.js")); }); gulp.task('default', function() { gulp.run('uglify'); });
後はgulpコマンドでuglifyを呼んだらできるはず。
C:\Users\FMVF56DDRZ\Dropbox\gulp>gulp uglify [23:12:01] Using gulpfile ~\Dropbox\gulp\gulpfile.js [23:12:01] Starting 'uglify'... [23:12:01] Finished 'uglify' after 61 ms
これで、前回Gruntでやったように、sample01.jsとsample02.jsをミニファイして結合したoutput.min.jsができるはず・・・。
C:\Users\FMVF56DDRZ\Dropbox\gulp>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 4270-BB9E です C:\Users\FMVF56DDRZ\Dropbox\gulp のディレクトリ 2014/10/18 23:15 <DIR> . 2014/10/18 23:15 <DIR> .. 2014/10/18 20:51 296 gulpfile.js 2014/10/18 23:11 <DIR> node_modules 2014/10/18 23:12 <DIR> output.min.js 2014/10/13 20:20 72 sample01.js 2014/10/13 20:21 75 sample02.js 3 個のファイル 443 バイト 4 個のディレクトリ 730,098,659,328 バイトの空き領域
予想に反して、『output.min.js』という名前のフォルダができました。中を見てみると、その中にミニファイされたsample01.jsとsample02.jsがありました。
とりあず、『ビルドツール「gulp」を触ってみた – E-riverstyle Vanguard』を参考に、gulp-concatをインストールしてgulpfile.jsを下記のように変更。
var gulp = require('gulp'); var uglify = require('gulp-uglify'); var concat = require('gulp-concat'); gulp.task("concat", function() { return gulp.src(['sample01.js','sample02.js']) .pipe(uglify()) .pipe(concat('output.min.js')) .pipe(gulp.dest('./')); }); gulp.task('default', function() { gulp.run('concat'); });
その後、『gulp concat』と実行すれば、無事、output.min.jsが出力されました。中身は下記のようになっていました。
function viewYourDomain(o){console.log("あなたのサイトドメインは、"+o+"です")} !function(){viewYourName("am-yu.net")}();
改行がついていますが、結合はできたようです。
分からないなりにやってみましたが、やっぱりまだよく分からないところも多いので、もう少し調べてみようと思います。
追記:
concatとuglifyの順番を逆にすると改行なしで出力できました。
var gulp = require('gulp'); var uglify = require('gulp-uglify'); var concat = require('gulp-concat'); gulp.task("concat", function() { return gulp.src(['sample01.js','sample02.js']) .pipe(concat('output.min.js')) .pipe(uglify()) .pipe(gulp.dest('')); }); gulp.task('default', function() { gulp.run('concat'); });
コメント