gulpfileを書いたメモ
概要
gulp
で.cjsx
を.js
にして、browserify
して、ミニファイして、sourcemapを書きだすのを、ファイルを監視して差分ビルドするgulpfile.coffee
を書いた。
gulpfile.coffee
を書くのに色々と苦労したので書き残しておきたかった。
コードはココ
CoffeeScript
最近、Electron
に興味を持ち、Node.js
にさぐりさぐり触ってみていた。
Node.js
ついて調べていてよく目につくのが、AltJSの話。そこで、CoffeeScript
の素晴らしさに気づいた。
CoffeeScript
はかなりRuby
に影響されているところがあり、馴染みやすいところが多い。しかし、馴染みにくいところもある。やはりインデントを利用した記法は抵抗が大きかった。
記法に関しては分かるのだが、インデントがあっていなかったり、逆に改行するとレシーバが浮いていたり、callback
の引数があるため()
を付ける部分を統一できなかったりで、いろいろ気になるところが多くてなかなか慣れない。
Ruby
的な開けたら閉じるという精神があるとこのへんモヤモヤするのは性なのでしょう。
Improve chaining syntax · Issue #1495 · jashkenas_coffeescript
Gulp
CoffeeScript
はJavaScript
にコンパイルする必要があるが、そこでコンパイルなどの作業のタスク管理をしてくれるのがGulp
。Scss
、CoffeeScript
、などのそれぞれのビルドタスクを設定、ソースマップの生成、ファイルの変更を監視しコンパイルを行うなど、プラグインを利用し、ビルドタスクの管理を行う事ができる。
Gulp
と同様なタスクランナーとして他にGrunt
がある。Grunt
についてはあまり調べていないため、これ以上言及しないが、Grunt
は開発が止まっているとのことで、私はGulp
を選択した。
Gulp
はタスクをgulpfile.js
に記述する。そして、この記述方法がStream
というものを利用しているのだが、これもまた慣れないものである。ストリームについては下の記事にいろいろ書いてある。
gulpfileを書く
gulp
はgulpfile.js
をデフォルトで読み込むが、--require coffee-script
をつけることでgulpfile.coffee
を読み込んでくれる。
alias gulp='gulp --require coffee-script'
としておくと捗る。
今回やることは概要にも書いたとおりなのだが、以下にnpmパッケージと対応させて表にしてみた。
npm | 用途 |
---|---|
gulp | Gulp自体 |
gulp-plumber | コンパイルに失敗したときにgulp が終了しないようにする |
gulp-coffee | CoffeeScript のコンパイルを行う |
gulp-cjsx | CoffeeScript にjsx なシンタックスを記述できるようにした.csjx ファイルを.js に変換する |
gulp-watchify | ファイルの変更を監視して差分をビルドする |
gulp-rename | 出力されるファイル名を変更する |
gulp-uglify | .js ファイルの圧縮(ミニファイ)を行う |
gulp-sourcemaps | ソースマップの生成を行う |
vinyl-buffer | Stream化を行う |
これらを用いて書いたgulpfileが以下である。
scss
など他のファイルのビルドタスクを増やす時はbuild:scss
とタスクを書きwatchに追加すれば良い。
ReactとCoffeeScript
VirtualDOMを利用したViewコンポネントの構成を行うライブラリとしてReact
最近話題になっている。
React
はDOMオブジェクトを生成する際に独特のシンタックスとしてjsx
というものが存在する。jsx
を使わないでjs
のみで書くこともできるのだが、冗長な記法故にjsx
が用いられることが多い。
また、他にReactDOMオブジェクトに変換可能なテンプレートを提供するライブラリ(react-jade
など)も存在する。
今回はそのjsx
をCoffeeScript
内に記述できるシンタックスを提供するcjsx
を利用した。
上のnpmパッケージリストにも書いたが、cjsx
の変換にgulp-coffee-react-transform
を利用した。cjsx
を変換するライブラリは複数存在し、今回はgulpStreamとして記述できるものを選択した。しかし、gulp-coffee-react-transform
はブラックリストに含まれている。
同様のライブラリとしてgulp-cjsx
が存在し、こちらはブラックリストに含まれていないため、こっちの方が良いかもしれない。
gulp-coffee-react-transform
とgulp-cjsx
の違いは前者は.cjsx
から.coffee
に変換し、後者は直接js
に変換する。
gulp-coffee-react-transform
は正常に動作していないため、gulp-cjsx
を利用する。
で
とりあえずgulpfile.coffee
は一旦出来上がった。
なかなか分からない事が多く、一日中gulpfile
をいじっていたように思う。
機能を増やしていって自分用にカスタマイズしていく感じがエディタを弄ってる気分になれてなんかハマる。
browserify
のところはまだ改良が必要だと思う。なにか良い書き方があったら教えてください。
でで
React
とFlux
とElectron
でかつて作ってたTwitterクライアントのLumilly
を再設計してみようかなと思っている。
Flux
がなかなか理解が追い付いていなくて、整理できたらこれについても記事を書こうかなと思う。
参考にした記事
blog comments powered by Disqus