音の鳴るブログ

鳴らないこともある

grunt-este-watch めっちゃ便利やんけ

grunt-este-watch で幸せになれるらしいと聞いて試した。

そしたら凄く良かったという話です。

CPUの消費量は気にしていなかったのだけど、変更のあったファイルに対して柔軟にタスクが組めるのが非常に便利。今まで変更があるたびに関係ない部分もテストしていたり、それをなくすために複雑な方法を使ったりしていたけどだいたい解決した。しかも速くなった。

今までやりたかったこと

  • 更新したファイルのみ jshint したい
  • 更新したファイルに関連するテストだけ行いたい
  • 更新したテストファイルのテストだけ行いたい
  • 失敗したテストは次回もテストしたい

こういうことをしようとしたとき、grunt-contrib-watch ではやりにくかった。というのもサブプロセスでタスクを実行したりする場合、やりたいことをタスクに伝える方法がなくて、外部ファイルを駆使したりやたら複雑なことで実現していた。サブプロセスを使わなかったら watch タスクを巻き込んで落ちるし、、やり方が悪かっただけかもしれないけど。

grunt-este-watch

これの良いところは対象のファイルに対してどういうタスクを実行したいのかを関数で書けるところだと思う。たとえば末尾が _test.js で終わるならそのテストだけ実行すれば良いし、そうでなければそのファイルだけ jshint して related_test.js のテストだけを実行するとかが書きやすい。

上であげたやりたいことを実現する簡単なサンプルを示す。ポイントとしては 19行目の jshint するファイルを設定している箇所と、30行目の require.cache をクリアする箇所で、後者は自分で書いたタスクで mocha を呼び出そうとしているときに悩んだ。grunt-este-watch は同一プロセスで動作するみたいなので、一度 require したらキャッシュに残って二度と require されず、テストが一回しか実行されなくなる。それを解消している。

gist6990165