[Babel] Babel: exorcist で Source map を出力、watchify で差分コンパイルする

前回の続き。

Source map – exorcist

前回までの対応で、ソースマップがトランスパイル後の表示になっているよう。

2016-04-10_babel_01

exorcist で解決するとのことなので、インストールする。

% npm install --save-dev exorcist

bundle up する。

% $(npm bin)/browserify ./src/basic.es6 -t [ babelify --sourceMap ] -d | $(npm bin)/exorcist ./lib/basic.js.map > ./lib/basic.js

2016-04-10_babel_02

npm run から計測すると、毎回 1.5sec くらいかかる。

% time npm run build
> sandbox-es6@0.2.0 build /Users/****/projects/sandbox-es6
> browserify ./src/basic.es6 -t [ babelify --sourceMap ]  -d | exorcist ./lib/basic.js.map > ./lib/basic.js
npm run build  1.46s user 0.21s system 106% cpu 1.574 total

差分コンパイル – watchify

gulp-watchなどを利用してファイル変更のトリガーでBrowserifyを実行すると非常に時間がかかってしまいます。そこで、watchifyを利用することで差分管理がされ高速にコンパイルすることが可能になります。

インストール。

% npm install --save-dev watchify

npm run から下記を実行すると Watch も行われる。

watchify ./src/basic.es6 -t babelify -o 'exorcist ./lib/basic.js.map > ./lib/basic.js' -d -v

実行すると、確かに速く、差分時にはもっと速い。

% npm run build
> sandbox-es6@0.2.0 build /Users/****/projects/sandbox-es6
> watchify ./src/basic.es6 -t babelify -o 'exorcist ./lib/basic.js.map > ./lib/basic.js' -d -v
3462 bytes written to exorcist ./lib/basic.js.map > ./lib/basic.js (0.73 seconds)
3462 bytes written to exorcist ./lib/basic.js.map > ./lib/basic.js (0.05 seconds)

watchify は

  • browserify のラッパーらしく browserify ではなく watchify で動かす。
  • watch もしてくれる。

まとめ

babel に関する package.json の記述の遷移は、以下のようになった。
require と Source map でここまで必要。

// Babel でトランスパイルできた
babel src/ -d lib/ -s
// Browserify で require できるように
browserify src/basic.es6 --debug --transform babelify --outfile lib/basic.js
// exorcist で Source map 出力する
browserify ./src/basic.es6 -t [ babelify --sourceMap ]  -d | exorcist ./lib/basic.js.map > ./lib/basic.js
// watchify で実用的な差分コンパイルをする
watchify ./src/basic.es6 --debug --transform babelify --outfile 'exorcist ./lib/basic.js.map > ./lib/basic.js' --verbose

以上でブラウザ向けに ES6 を素振りする環境が整ったようなので、sandbox としてまとめておく。

2016年の下半期までには「ES6(2015)ではじめる JavaScript 入門」といった本が出ますよね、きっと!
ということで、素振りをしつつ待ちたい。