ファイルやフォルダが作成されたタイミングや、変更・削除されたタイミングで処理を実行する要件がありましたので、Nodeモジュールで簡単にできないかと調査してみました。
1. Nodeモジュール
chokidar というモジュールを使用します。
https://www.npmjs.com/package/chokidar
2. ソース
import * as chokidar from "chokidar"
let watcher = chokidar.watch("./data/", {
ignored:/[\\/\\\\]\./,
persistent: true
})
watcher.add("./data2/")
watcher.add("./data3/tetete.txt")
watcher.on("ready", () => {
console.log(ready watching ...])
watcher.on("add", (path) => {
console.log(added : ${path})
})
watcher.on("change", (path) => {
console.log(changed : ${path})
})
watcher.on("unlink", (path) => {
console.log(unlink : ${path})
})
watcher.on("addDir", (path) => {
console.log(addDir : ${path})
})
watcher.on("unlinkDir", (path) => {
console.log(unlinkDir : ${path})
})
})
このソースの監視対象は以下のとおりです。
./data/
配下のすべてのファイルとフォルダ./data2/
配下のすべてのファイルとフォルダ./data3/
配下のtetete.txt
ファイルのみ
3. 詳しい説明
chokidar.watch
で監視対象を指定します。この例では、watcher
というオブジェクトに格納しています。watcher.add
で監視対象を追加しています。フォルダ名だけの場合は、配下のすべてのファイル・フォルダが対象になります。ファイル名まで指定すると、そのファイルのみ監視対象になります。watcher.on
で監視対象がヒットした場合の処理を記述します。add
は、ファイルが追加されたタイミングで実行されます。change
は、ファイルが変更されたタイミングで実行されます。unlink
は、ファイルが削除されたタイミングで実行されます。addDir
は、フォルダが追加されたタイミングで実行されます。unlinkDir
は、フォルダが削除されたタイミングで実行されます。
4. 処理結果
> node .\index.js
ready watching ...
added : data\新しいテキスト ドキュメント.txt
added : data\test.txt
unlink : data\新しいテキスト ドキュメント.txt
changed : data\test.txt
unlink : data\test.txt
addDir : data2\新しいフォルダー
unlinkDir : data2\新しいフォルダー
addDir : data2\testdir1
addDir : data2\testdir1\新しいフォルダー
unlinkDir : data2\testdir1\新しいフォルダー
addDir : data2\testdir1\testdir2
added : data2\testdir1\testdir2\新しいテキスト ドキュメント.txt
added : data2\testdir1\testdir2\test3.txt
unlink : data2\testdir1\testdir2\新しいテキスト ドキュメント.txt
unlink : data2\testdir1\testdir2\test3.txt
5. fs.watch との比較
chokidar
は、MacOS以外のプラットホームではfs.watch
を使用しており、MacOSではDarwin FSEvents API
を使用しているそうです。
なぜかと言うと、fs.watch
はすべてのプラットホームで正しく動作するわけでは無いからです。
The fs.watch API is not 100% consistent across platforms, and is unavailable in some situations

File system | Node.js v20.3.0 Documentation
実践TypeScript【電子書籍】[ 吉井健文 ]
価格:3726円 (2019/7/23時点)
楽天で購入
](https://hb.afl.rakuten.co.jp/hgc/18648e8b.7d833591.18648e8c.ed1bab3c/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Frakutenkobo-ebooks%2F5456816fd8833397a6aa8b80647873ad%2F%3Fscid%3Daf_pc_bbtn&m=http%3A%2F%2Fm.rakuten.co.jp%2Frakutenkobo-ebooks%2Fi%2F18341447%2F%3Fscid%3Daf_pc_bbtn&link_type=picttext&ut=eyJwYWdlIjoiaXRlbSIsInR5cGUiOiJwaWN0dGV4dCIsInNpemUiOiIyNDB4MjQwIiwibmFtIjoxLCJuYW1wIjoicmlnaHQiLCJjb20iOjEsImNvbXAiOiJkb3duIiwicHJpY2UiOjEsImJvciI6MSwiY29sIjoxLCJiYnRuIjoxfQ==)
コメント