chokidarを使ってファイルの変更をwatchする
Riot.jsの話。
カスタムタグが増えるにつれ、Riot CLIによるコンパイル時間がバカにならなくなってきた。
特にwatchの立ち上げ時に時間がかかる。
コンパイルオプションとしてBabelとStylusを使用しているので、最初これらを疑ったが、buildのみだとさほどかからないので、Riotのwatchオプション内で何かまずい事が起きていると思われる。
そこで、私の上長がファイル変更の監視をchokidarで行う方法に書き直したところかなり改善された。
ソース全体のビルドはnpm run build
のみで行い、npm run watch
では初回ビルドを行わないようにした。
{ "scripts": { "build": "riot --type babel src/tags lib/tags", "watch": "SHELL=/bin/bash chokidar 'src/tags/**/*.tag' -c 'OUTPATH=`echo {path} | sed -e \"s/^src/lib/\" -e \"s/\\.tag$/.js/\"` && mkdir -p $(dirname $OUTPATH) && riot --type babel {path} $OUTPATH'" } }
こういう時、sedの正規表現が分からなくて、大体いつもここを見に行っている。
chokidar
chokidarは指定した対象の変更をフックして、任意の処理を実行する事ができるnpm package。
みんなつこてる。
It is used in brunch, gulp, karma, PM2, browserify, webpack, BrowserSync, socketstream, derby, and many others. It has proven itself in production environments.
使い方
-c
または--command
に続けてフックさせたい処理を渡す。
$ chokidar '監視したい対象をglobで指定' -c '実行したいコマンドを渡す; この中では{event}で変更の種類、{path}で変更のあったファイルのパスが参照できる'