fs.watchでハマったところ
node.jsでファイルを監視したくてfs.watchを使ってみたのですが、ちょっとハマったのでメモを。
環境:Ubuntu 11.10 64bit / nodebrew 0.5.0 / node 0.6.14
やりたいこと
- ファイルが保存されたことを検知
- ファイルの内容を読み込み
- 読み込んだデータを出力
コード
このコードを実行中に./aaa.txtというファイルが変更されたら、それを表示しなおすスクリプトです。
#!/usr/bin/env node // watchFile.js var fs = require('fs') ; var watchFile = './aaa.txt' ; function watch(event, filename) { // ファイル内容が変わったイベントでないなら無視 if (event !== 'change') { return; } fs.readFile(filename, 'utf8', function (err, data) { if (err) throw err; console.log(data); fs.watch(watchFile, watch); // ここが大事 }); } fs.watch(watchFile, watch);
実行
$ touch aaa.txt
$ node watchFile.js
実行中にaaa.txtを変更してみると、標準出力に保存されている内容が表示されます。
てっきりfs.watchを一度実行するとずっと監視してくれるのかと思っていたら、イベントが終わったあとに登録し直さないといけないみたいで。
第二引数に指定できる、persistentにtrueを渡すことでそれが実現できるのかと思ったら、そうでもないみたいですし。
「ファイルが監視されている間、プロセスが実行し続ける」ってどういう意味だろう?trueだとプロセスが終わろうとしても監視を続けるってこと?
追記:
多分使い方間違ってる……