运行时包管理器打包器测试运行器代码检查格式化指南参考博客反馈

监视目录变化

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

以下代码会监听当前目录中的文件变化。默认情况下,监听是_浅层_的:不会检测子目录中的文件变化。

TypeScript
import { watch } from "fs";

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

要监听子目录中的变化,请将 recursive: true 选项传递给 fs.watch。

TypeScript
import { watch } from "fs";

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

使用 node:fs/promises 模块时,可以使用 for await...of 代替回调来监听变化。

TypeScript
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 时候。

TypeScript
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);
});

请参阅 Node.js 文档 中关于 fs.watch 的说明。