跳至主要内容

观察文件系统

在创建框架或 CLI 工具时,通常需要观察文件系统的变化。

在 Github 上编辑
观察文件系统的最简单方法是使用 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();
}
在实际应用中,应用程序需要立即对每次更改做出反应的情况非常少见。事件将被复制,并且对于相同的更改,将分派多个事件。为了解决这个问题,我们可以对我们的函数进行 "防抖"。
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://docs.deno.org.cn/examples/watching-files.ts