Node.js入门笔记7
Node.js—fs监听
一、fs监听
1. fs.watch():监听文件或目录的修改(跨平台支持可能不一致)
语法格式:
fs.watch(filename[, options][, listener]);
参数解读:
filename:必选。要监听的文件或目录的路径,可以是字符串、Buffer 或 URL 对象。
options:可选。可以是一个字符串或对象,指定如何监听文件。
默认值为 persistent: true,表示当正在监听时,进程是否应该继续运行。
recursive: false ,表示是否递归监听目录中的所有子目录。
encoding:指定文件名的字符编码,默认为 ‘utf8’。
listener:可选。当文件发生变化时调用的回调函数。
eventType:一个字符串,表示发生的事件类型,通常为 ‘rename’ 或 ‘change’。
filename:发生变化的文件或目录的名称。
监听单个文件的变化
const fs = require('fs');
// 监听文件变化
const watcher = fs.watch('test.txt', (eventType, filename) => {
if (filename) {
console.log(`文件 ${filename} 发生了 ${eventType} 事件`);
} else {
console.log('未指定文件名');
}
});
// 监听 5 秒后停止监听
setTimeout(() => {
watcher.close();
console.log('停止监听');
}, 5000);
写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】
node C:\Users\Administrator\Desktop\learning\watch.js
递归监听目录变化
const fs = require('fs');
// 递归监听目录变化 使用 { recursive: true } 选项来递归监听 testDir 目录及其所有子目录的变化。
fs.watch('testDir', { recursive: true }, (eventType, filename) => {
if (filename) {
console.log(`目录 ${filename} 发生了 ${eventType} 事件`);
} else {
console.log('未指定文件名');
}
});
写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】
node C:\Users\Administrator\Desktop\learning\watch.js
2. 如果 fs.watch() 的跨平台兼容性和性能问题对你的应用程序有影响,可以考虑使用 chokidar 库
,它是一个功能强大且跨平台的文件监听库,使用起来更加方便。
const chokidar = require('chokidar');
// 监听文件或目录变化
const watcher = chokidar.watch('testDir', {
persistent: true,
recursive: true
});
// 监听文件添加事件
watcher.on('add', (path) => {
console.log(`文件 ${path} 已添加`);
});
// 监听文件变化事件
watcher.on('change', (path) => {
console.log(`文件 ${path} 已更改`);
});
// 监听文件删除事件
watcher.on('unlink', (path) => {
console.log(`文件 ${path} 已删除`);
});
写完代码后,需要在terminal控制台输入指令:node 【 js文件的路径】
node C:\Users\Administrator\Desktop\watch.js