はじめに
件名通りです。
痛い目を見ないように、備忘録も兼ねて。
gulp watchでファイルの変更を監視しよう
タイトルのように思った時が私にもありました( ˘ω˘)
watch対象のディレクトリ構成はこちら
test
├─foo
| └─ foo.txt
|
├─bar(fooへのsymlink)
|
└─test.txt
とってもシンプルな構成です。
watch開始ッ!
gulpfile.js
const gulp = require('gulp');
gulp.task('default', () => {
const watcher = gulp.watch('test/*');
watcher.on('change', function (event) {
console.log(event.path);
})
});
これをnpmから起動してtest配下をwatchしてみました。
変更があればパスを表示するだけのはず……!
test.txtの更新
touch test/test.txt
touchコマンドで更新日時を書き換えてみます。
さて、gulpのwatchの結果はというと……
$ gulp
[23:33:48] Starting 'default'...
[23:33:48] Finished 'default' after 7.42 ms
/xxx/test/test.txt
/xxx/test/bar
test.txtを更新していないのにbarもconsole.logとして対象に出ているッ!?
今回はconsole.logなんですが、barディレクトリのpathをファイル操作系の関数とかに突っ込んでいたりすると……
まぁ、タイトルが痛い目を見たお話というところで察して下さい。
考察
gulpは特にバグっていないとして
symlinkのあるディレクトリでファイルを更新すると、symlink側の更新?リンクの再生成か何かが起きる?
そのためにgulpのwatchイベントに引っかかる。
……とかなのだろうか?
このあたり、原因や理由が書かれているドキュメント的なものがあれば欲しい……
どなたかご存知でしたら