監看檔案系統
在 Github 上編輯
在建立框架或 CLI 工具時,通常需要監看檔案系統的變更。
監看檔案系統最簡單的方法是使用 Deno 內建的 watchFs。Deno.watchFs 會回傳 FsWatcher,這是一個非同步可迭代物件。
let watcher = Deno.watchFs("./");
與非同步可迭代物件互動最簡單的方式是使用 javascript 的 for await of 語法。
for await (const event of watcher) {
console.log(">>>> event", event);
若要停止監看器,我們可以簡單地呼叫 `watcher.close()`
watcher.close();
}
在實際應用程式中,應用程式很少需要立即對每個變更做出反應。事件會被重複,並且相同的變更會分派多個事件。為了規避這個問題,我們可以「debounce」我們的函式。
import { debounce } from "jsr:@std/async/debounce";
在這個特定案例中,我們使用標準函式庫來為我們完成工作。此函式最多每兩百毫秒執行一次
const log = debounce((event: Deno.FsEvent) => {
console.log("[%s] %s", event.kind, event.paths[0]);
}, 200);
watcher = Deno.watchFs("./");
for await (const event of watcher) {
log(event);
}
使用 Deno CLI 在本機執行這個範例
deno run --allow-read https://deno-docs.dev.org.tw/examples/scripts/watching_files.ts