【Node.js入门笔记7---fs监听】

发布于:2025-03-18 ⋅ 阅读:(18) ⋅ 点赞:(0)

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

网站公告

今日签到

点亮在社区的每一天
去签到