3

Ubuntu 12.04 Node v0.6.14 CoffeeScript 1.3.1

fs.watchFile coffee_eval, (e) ->
  console.log e
  result = spawn 'coffee', ['-bc', coffee_eval]
  msg = ''
  result.stderr.on 'data', (str) ->
    msg+= str
  result.stderr.on 'end', ->
    console.log 'msg: ', msg
  print "!! #{coffee_eval}\n"

Gist のコード全体: https://gist.github.com/2621576

監視対象のファイルを保存するたびに、メイン関数が一度ではなく twitce と呼ばれます。
私のエディタは Sumlime Text 2 です。

出力単語を見ることができます:
ここに画像の説明を入力

4

9 に答える 9

5

fs.watchFile は不安定です。ノードのドキュメントから:

fs.watchFile(ファイル名、[オプション]、リスナー)#

安定性: 2 - 不安定。可能な場合は、代わりに fs.watch を使用してください。

を試すことはできますがfs.watch、残念ながら同じ問題が発生する可能性があります。同様の監視スクリプトfs.watchを作成しようとすると、Windowsでも同じ問題が発生しました。

回避策は、変更が発生した時間をログに記録し、2 番目の変更が数ミリ秒以内にトリガーされた場合は無視することでした。少し醜いですが、うまくいきました。

于 2012-05-06T14:57:43.927 に答える
1

fs.watchFileやfs.watchよりもはるかにうまく機能したnode-inotify-plusplus(https://github.com/coolaj86/node-inotify-plusplus )を試すことをお勧めします。

于 2012-05-06T15:02:58.673 に答える
0

この問題を解決するために、以前の「ファイル変更」タイムスタンプを追跡し、値が同じ場合は通常のコールバック コードを実行しません。

var filename = "/path/to/file";
var previousMTime = new Date(0);
var watcher = fs.watch(filename, {
    persistent: false
}, function(){
    fs.stat(filename, function(err, stats){
        if(stats.mtime.valueOf() === previousMTime.valueOf()){
            console.log("File Update Callback Stopped (same revision time)");
            return;
        }
        previousMTime = stats.mtime;

        // do your interesting stuff down here
    });
});
于 2013-05-19T05:52:28.700 に答える