1年ぐらいgulpを使おうとがんばったけど理解できなかったので、先月からこちらを参考にpackage.jsonのnpm run scriptにshell script書いてタスク実行する方式をやっている

参考:Grunt/Gulpで憔悴したおっさんの話 – MOL

あらためて最近使ってるコマンドの周辺ツールを調べると、ファイル更新検知して差分だけタスク実行してくれる機能があるのが多い。


あとは上の記事にも書いてあるんだけどparallelshellで複数のwatchしてくれる系コマンドを同時に実行できるので

例えばこんな感じでpackage.jsonのscriptsを書いて、npm run watchで全部watchしてビルドしたりlintしたりしている。
{
  "name": "es6-study",
  "private": true,
  "version": "1.0.0",
  "scripts": {
    "watch": "parallelshell 'npm run build -- --watch' 'esw src/*.es6 server/*.es6 --watch'",
    "build": "babel src/ --out-dir dist/ --source-maps inline",
    "test": "eslint src/*.es6 server/*.es6",
    "server": "babel-node server/app.es6",
    "start": "npm run build && npm run server"
  },


で、よく見たらbabel/eslint-watch/watchifyでみんなchokidarというnpmを使っていた。
chokidarはNode組み込みのfs.watchとMac用のfseventsを適切に使い分けてくれるクロスプラットフォームなファイル監視ライブラリで、これを使えばファイルの更新を監視してタスク実行する系のツールは簡単に作れそう。

さらにchokidar-cli npmというのがあってこれをグローバルインストールすると使えるchokidarコマンドがファイル監視してからの指定コマンド実行をやってくれる。

例えばこんな感じで実行するとwatchしてテストを実行できる
% chokidar "**/*.es6" -c 'npm run test'

watchというnpmもファイル更新監視してコマンド実行してくれるコマンドが付いているんだけど、こっちはpollingなので1秒ぐらいラグがあってつらい。chokidarだと一瞬で更新検知して実行されててすごい。