Skip to content

Bun は node:fs モジュールを実装しており、ファイルシステムの変更をリッスンするための fs.watch 関数も含まれています。

このコードブロックは、現在のディレクトリ内のファイルの変更をリッスンします。デフォルトでは、この操作は 浅い ものであり、サブディレクトリ内のファイルへの変更は検出されないことに注意してください。

ts
import { watch } from "fs";

const watcher = watch(import.meta.dir, (event, filename) => {
  console.log(`${filename} で ${event} を検出しました`);
});

サブディレクトリの変更をリッスンするには、recursive: true オプションを fs.watch に渡します。

ts
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
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() を呼び出します。ユーザーが Ctrl-C を押したときなど、プロセスが SIGINT シグナルを受信したときにこれを行うのが一般的です。

ts
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 > バイナリデータ > 型付き配列 ドキュメントを参照してください。

Bun by www.bunjs.com.cn 編集