监控文件系统
在创建框架或 CLI 工具时,通常需要监听文件系统的变化。
let watcher = Deno.watchFs("./");
与异步迭代器交互最简单的方法是使用 JavaScript 的
for await of
语法。for await (const event of watcher) {
console.log(">>>> event", event);
要停止监听器,我们只需调用
watcher.close()
。 watcher.close();
}
在实际应用中,应用程序很少需要立即响应每个变化。事件可能会重复,并且对相同的变化会分派多个事件。为了解决这个问题,我们可以“去抖”我们的函数。
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 -R https://docs.deno.org.cn/examples/scripts/watching_files.ts
watchFs
。Deno.watchFs
返回一个FsWatcher
,它是一个异步迭代器。