> ## Documentation Index
> Fetch the complete documentation index at: https://bun.zhcndoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 监视目录变化

Bun 实现了 `node:fs` 模块，包括用于监听文件系统变化的 `fs.watch` 函数。

以下代码块监听当前目录中文件的变化。默认情况下，此操作是**浅层**的，意味着对子目录中文件的变化将不会被检测到。

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
import { watch } from "fs";

const watcher = watch(import.meta.dir, (event, filename) => {
  console.log(`检测到 ${filename} 的 ${event} 事件`);
});
```

***

要监听子目录中的变化，请向 `fs.watch` 传递 `recursive: true` 选项。

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
import { watch } from "fs";

const watcher = watch(import.meta.dir, { recursive: true }, (event, relativePath) => {
  console.log(`检测到 ${relativePath} 的 ${event} 事件`);
});
```

***

使用 `node:fs/promises` 模块，可以使用 `for await...of` 来监听变化，而非使用回调函数。

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
import { watch } from "fs/promises";

const watcher = watch(import.meta.dir);
for await (const event of watcher) {
  console.log(`检测到 ${event.filename} 的 ${event.eventType} 事件`);
}
```

***

要停止监听变化，调用 `watcher.close()`。通常在进程收到 `SIGINT` 信号时执行此操作，比如用户按下 Ctrl-C 时候。

```ts theme={"theme":{"light":"github-light","dark":"dracula"}}
import { watch } from "fs";

const watcher = watch(import.meta.dir, (event, filename) => {
  console.log(`检测到 ${filename} 的 ${event} 事件`);
});

process.on("SIGINT", () => {
  // 在按下 Ctrl-C 时关闭监听器
  console.log("正在关闭监听器...");
  watcher.close();

  process.exit(0);
});
```

***

有关在 Bun 中处理 `Uint8Array` 和其他二进制数据格式的更多信息，请参阅 [API > 二进制数据 > 类型化数组](/runtime/binary-data#typedarray)。
