Bun implements the node:fs
module, including the fs.watch
function for listening for file system changes.
This code block listens for changes to files in the current directory. By default this operation is shallow, meaning that changes to files in subdirectories will not be detected.
import { watch } from "fs";
const watcher = watch(import.meta.dir, (event, filename) => {
console.log(`Detected ${event} in ${filename}`);
});
To listen to changes in subdirectories, pass the recursive: true
option to fs.watch
.
import { watch } from "fs";
const watcher = watch(
import.meta.dir,
{ recursive: true },
(event, filename) => {
console.log(`Detected ${event} in ${filename}`);
},
);
Using the node:fs/promises
module, you can listen for changes using for await...of
instead of a callback.
import { watch } from "fs/promises";
const watcher = watch(import.meta.dir);
for await (const event of watcher) {
console.log(`Detected ${event.eventType} in ${event.filename}`);
}
To stop listening for changes, call watcher.close()
. It's common to do this when the process receives a SIGINT
signal, such as when the user presses Ctrl-C.
import { watch } from "fs";
const watcher = watch(import.meta.dir, (event, filename) => {
console.log(`Detected ${event} in ${filename}`);
});
process.on("SIGINT", () => {
// close watcher when Ctrl-C is pressed
console.log("Closing watcher...");
watcher.close();
process.exit(0);
});
Refer to API > Binary data > Typed arrays for more information on working with Uint8Array
and other binary data formats in Bun.