タスクランナーやバンドラのwatch機能ってあるじゃないですか。あれらはもちろん知っていたのですが、nodeの標準パッケージにもwatchがあるんですね。初めて知りました。
というわけでメモ。
fs.watch
使い方:fs.watch(filename[, options][, lister])
指定したファイルの変更を監視します。戻り値は、fs.FSWatcherというオブジェクトのようです。
オプション(options)は、デフォルトで { persistent: true, recursive: false }のようです。persistentは監視を続けるかどうか、recursiveはディレクトリ構造を掘り下げて監視するかどうか、をそれぞれ指定できるようです。
というか、persistentをfalseにしてしまったらwatchではないような。。。
リスナー(lister)はコールバック関数で、eventとfilenameの2つの引数をとります。eventが'rename'か'change'で、filenameがイベントを引き起こしたファイルの名前です。
公式:File System Node.js v5.10.0 Manual & Documentation
使ってみる
さっそく使ってみます。
ファイル名とイベントの取得
まずは最小構成で実行してみます。
ためしに以下のようなファイルを作成しました。
fs-watch.jsが監視を行うファイルで、index.jsが監視対象です。
fs-watch.jsの処理内容は以下のとおりです。
gista5794d1aa136b945c250581d2579bdc1
ファイルに変更があった際に、そのファイル名とイベントを出力します。
まずは、監視をスタートします。
$ node fs-watch.js
監視が始まりますので、この状態で、index.jsを変更します。
'a'という文字を加えて保存します。すると、
変更を加える度に、その旨が表示されます。
また、ファイル名を変更した際も、
きちんと表示がされます。
ふむ。
コールバック関数にコンパイル的な処理を書けば、いわゆるwatch機能が完成しそうですね。
また次回watch機能を書いてみます。
注意
ちなみに、fs.watchはすべてのプラットフォームできちんと動くわけではないようです。
File System Node.js v5.10.0 Manual & Documentation
それと、fs.watchFileという似たような関数がありますが、fs.watchが推奨のようです。