Chokidarでglobパターンを使ってハマったこと


Chokidarはnode.jsのfs.watch, fs.watchFile, FSEventsをラッパーしたものです。ファイルやフォルダ監視をする際に、使いやすくて便利です。

Electronアプリを開発中に、chokidarを使う場面があり、ちょっとハマったところがあったので記録を残しておきます。

最初はこんな感じでchokidarを使っていました。環境はWindowsです。

const watchPath = 'C:\\user\\workspace\\download\\2019';
const watcher = chokidar.watch(watchPath, {ignoreInitial: true});
watcher.on('add', path => {
  /* 処理 */
});

上記の例ではwatchPathで指定したフォルダに対して、問題なく監視が行えていました。

次に、監視対象はglobパターンでも指定できるので、特定のファイルだけ監視ができるように変更しました。watchPathを以下のようにしました。

const watchPath = 'C:\\user\\workspace\\download\\2019\\*.json';

このようにしたところ、ファイル監視がうまく働きませんでした。

原因としては、バックスラッシュは特殊文字をエスケープするためにglobで予約されているため、バックスラッシュパスとglobパターンを組み合わせることはできないということでした。

以下のようにすれば問題なく動作しました。

const watchPath = 'C:/user/workspace/download/2019/*.json';

globパターンを使うときにはスラッシュパスを使いましょう。

参考URL

On windows, cannot watch files with some glob patterns #714