nodejs 文件目录监听 chokidar watchpack

文件监听实现,推荐使用chokidar:


chokidar  默认是基于事件监听文件


const chokidar = require("chokidar");
const folderToWatch = path.join(__dirname, "lib");
const watcher = chokidar.watch(folderToWatch, {
  ignored: /(^|[/\\])\../,
  persistent: true,
});
watcher.on("change", (filePath) => {
  console.log(` ${filePath} 发生变化. 重新生成config/gateway.config.yml...`);
  generator();
});
watcher.on("error", (error) => {
  console.error(`监听器报错: ${error}`);
});


在大多数其他平台上,基于 fs.watch的实现是默认的,这可以避免轮询并降低 CPU 使用率。
fs.watch 与 fs.watchFile区别:
fs.watch 方法会利用操作系统提供的文件系统事件通知机制来监听文件的改动。
能够更高效地捕捉到文件或文件夹的变化,不需要通过轮询来检查文件状态。在不同的操作系统上,它可能使用的底层实现不同,如inotify(Linux)、FSEvents(macOS)或ReadDirectoryChangesW(Windows)
fs.watchFile 方法使用轮询的方式来检查文件的状态变化,在指定的时间间隔内不断检查文件的最后修改时间和大小。如果发现文件发生了变化,就会触发回调函数。可能引起一些性能问题,特别是当处理较大的文件时或者监视较多的文件时。


常用配置项:
useFsEvents:默认为true。 是否基于FSEvent事件监听文件变化。当显式设置true并且fsevents可用时,它将取代usePolling的设置。
awaitWriteFinish(默认:false)。默认情况下,add当文件首次出现在磁盘上时(在写入整个文件之前),该事件将触发。此外,在某些情况下,change 在写入文件时会发出一些事件。在某些情况下,特别是在监视大文件时,需要等待写入操作完成才能响应文件创建或修改。设置awaitWriteFinish为true(或真值)将轮询文件大小,保留其add和change事件,直到大小在可配置的时间内不发生变化。适当的持续时间设置在很大程度上取决于操作系统和硬件。为了准确检测,此参数应该相对较高,从而使文件监视的响应速度大大降低。谨慎使用。
alwaysStat(默认:false)。如果依赖于 fs.Stats 可能通过add、addDir和change事件传递的对象,请将其设置为true以确保即使在底层监视事件尚不可用的情况下也能提供该对象。
options.awaitWriteFinish可以设置为一个对象以调整计时参数:
    awaitWriteFinish.stabilityThreshold(默认值:2000)。文件大小在发出事件之前保持不变的时间量(以毫秒为单位)。
    awaitWriteFinish.pollInterval(默认值:100)。文件大小轮询间隔,以毫秒为单位。

usePolling,默认值为false。 表示是否使用fs.watchFile()进行轮询操作,由于轮询会导致cpu飙升,所以此选项通常在需要通过网络监视文件的时候才设置为true
轮询特定设置(在usePolling: true 时有效)
    interval(默认:100)。文件系统轮询的时间间隔,以毫秒为单位。您还可以设置 CHOKIDAR_INTERVAL 环境变量来覆盖此选项。
    binaryInterval(默认:300)。文件系统轮询二进制文件的时间间隔。

persistent 默认值为true。与原生fs.watch一样,表示是否保护进程不退出持久监听,
ignored 所要忽略监听的文件或者文件夹
ignoreInitial 默认值为false(表示add/addDir会触发事件)。表示是否忽略对增加文件或者增加文件夹的时候进行发送事件,
cwd 没有默认值,类似于appBasepath,监听的paths所相对的路径。
depth没有默认值,如果设定则表示限定了会递归监听多少个子目录。


watchpack 只能是基于轮训监听文件。

通过poll参数控制轮训间隔 默认100毫秒。
var Watchpack = require("watchpack");
        this.wp = new Watchpack({
            aggregateTimeout: m.aggregateTimeout || 2000, // fire "aggregated" event when after a change for 2000ms no additional change occurred.  
            poll: 2000, // ms 
            followSymlinks: false,
            ignored: "**/.git"
        });
        let config = {
            files: _.map(m.files, (file) => { return path.join( rootDir, `/config/${file.path}/${file.name}.json`, ); }),
            startTime: Date.now() - (m.startTime || 10000)
        }
        this.wp.watch(config);
        this.wp.on("change", function (filePath, mtime, explanation) { });
        this.wp.on("remove", function (filePath, explanation) { });
        this.wp.on("aggregated", function (changes, removals) {
            child_process.execSync(cmd);
        });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167026.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Vue中使用Echarts

文章目录 Echarts1. 介绍2. 体验NPM 安装 Echarts定义 Echarts 容器引入 Echarts 3. 基础配置 Echarts 1. 介绍 常见的数据可视化库: D3.js 目前 Web 端评价最高的 Javascript 可视化工具库(入手难)ECharts.js 百度出品的一个开源 Javascript 数据可视化库Highch…

鼠标拖拽问题,不选中文本不触发单击事件

文章目录 1. 为什么鼠标单击的时候触发了mousemove事件?明明鼠标没有移动2. 鼠标拖拽元素怎么能不触发单击事件?怎么处理鼠标在元素内的相对定位,而不是每次定位到左上角?方式一:拖拽的元素没有注册click监听就不会触发…

10年测试老鸟,自动化测试经验10条建议,一路狂飙...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、哪一刻&#x…

Java面试题(每天10题)-------连载(37)

目录 Mysql篇 1、Mysql如何优化DISTINCT? 2、如何输入字符为十六进制数字? 3、如何显示前50行? 4、可以使用多少列创建索引? 5、NOW()和CURRENT_DATE()有什么区别? 6、什么样的对象可以使用CREATE语句创建&…

Postman如何使用(二):Postman Collection的创建/使用/导出分享等

一、什么是Postman Collection? Postman Collection是可让您将各个请求分组在一起。 您可以将这些请求组织到文件夹中。中文经常将collection翻译成收藏夹。如果再下文中看到这样的翻译不要觉得意外。Postman Collection会使你的工作效率更上一层楼。Postman Colle…

【洛谷 B2080】计算多项式的值 题解(顺序结构+四则运算)

计算多项式的值 题目描述 假定多项式的形式为 x n x ( n − 1 ) x^nx^{(n-1)} xnx(n−1) … x 2 x 1 x^2x1 x2x1,请计算给定单精度浮点数 x x x 和正整数 n n n 值的情况下这个多项式的值。多项式的值精确到小数点后两位,保证最终结果在 doub…

NFS 速度变慢问题排查 性能优化

NFS 使用 RPC 来进行客户端和服务器之间的通信。而在 RPC 的底层,NFS 使用 TCP 来进行数据的可靠传输,以便客户端和服务器之间能够有效地传输文件和进行远程调用(默认为TCP,也可调整为udp) 1.首先服务器端启动RPC服务portmap&…

教师工作就业前景

在这个知识爆炸的时代,当老师无疑是社会发展的重要基石。随着科技的进步和社会的发展,教育行业的需求也在不断增长。那么,教师工作的就业前景如何呢? 我们来看看教师工作的市场需求。随着国家对教育的重视和投入的增加&#xff0c…

C/C++ 实现Socket交互式服务端

在 Windows 操作系统中,原生提供了强大的网络编程支持,允许开发者使用 Socket API 进行网络通信,通过 Socket API,开发者可以创建、连接、发送和接收数据,实现网络通信。本文将深入探讨如何通过调用原生网络 API 实现同…

「Java开发中文指南」IntelliJ IDEA插件安装(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 插件扩展了Intel…

【分布式】分布式中的时钟

一、物理时钟 vs 逻辑时钟 时钟的存在主要是为了标识事件的发生顺序。 分布式系统不使用物理时钟记录事件,分布式系统中每个节点记录的时间并不一样,即使设置了 NTP 时间同步节点间也存在毫秒级别的偏差 所以需要有另外的方法记录事件顺序关系&#x…

vue2中使用echarts

1,安装echarts npm install --save echarts 2&#xff0c;具体页面 <template><div class"app-container"><div class"aa" id"main" style"width: 500px; height: 400px;"></div></div> </te…

PDF 批量处理软件BatchOutput PDF mac中文版介绍

BatchOutput PDF mac是一款适用于 Mac 的 PDF 批量处理软件。它可以帮助用户将多个 PDF 文件进行异步处理&#xff0c;提高工作效率。 BatchOutput PDF 可以自动化执行许多任务&#xff0c;包括 PDF 文件的打印、转换、分割、压缩、加密、重命名等&#xff0c;而且它还可以将自…

Elasticsearch知识

目录 Elasticsearch逻辑设计和物理设计 逻辑设计物理设计Elasticsearch原理 倒排索引文档的分析过程保存文档搜索文档写数据的底层原理 数据刷新&#xff08;fresh&#xff09;事务日志的写入ES在大数据量下的性能优化 文件系统缓存优化数据预热文档&#xff08;Document&…

【数据分享】2023年我国省市县三级的瞪羚企业数量(免费获取/Excel/Shp格式)

企业是经济活动的参与主体。一个城市的企业数量决定了这个城市的经济发展水平&#xff01;比如一个城市的金融企业较多&#xff0c;那这个城市的金融产业肯定比较发达&#xff1b;一个城市的制造业企业较多&#xff0c;那这个城市的制造业肯定比较发达。 之前我们给大家分享了…

《opencv实用探索·二》根据RGB的像素排列来理解图像深度、像素深度和位深度

通常对于RGB图像主要分为RGB16&#xff0c;RGB24和RGB32。RGB16从高位到低位的排列为R->G->B&#xff0c;RGB24和RGB32从高位到低位的排列为B->G->R。 RGB16: 16 位为一个存储单元&#xff08;一个像素&#xff09;&#xff0c;来存储一个RGB像素;因为人眼对绿色比…

社区物联网云服务架构设计

文章目录 1 摘要2 架构图2.1 社区物联网云服务网络拓扑图2.2 社区物联网云服务通讯流程图2.3 社区远程开锁功能流程图 3 应用场景 1 摘要 随着社区管理越来越智能化&#xff0c;社区物联网升级与改造的市场空间也越来越大。社区物联网包含楼宇对讲、门禁门锁、通道闸等等设备系…

Netty 模型理解

参考文章 1 参考文章 2 官网API文档 Reactor模型 Netty模型 Netty主要基于主从Reactor多线程模型进行了一定的修改&#xff0c;该模型包括以下几个组件&#xff1a; MainReactor&#xff08;主Reactor&#xff09;&#xff1a;负责处理客户端的连接请求。它监听服务器上的端口…

Linux:大文件查找、切割、统计操作命令

1、查找文件夹某个文件中指定内容 grep -r -l "指定内容" /文件夹路径 2、统计文件夹里文件个数 ll | grep ^- | wc -l 3、切割日志文件 split -b 200M -d -a 3 filename file_ 4、查看服务器磁盘里有哪些大文件夹 du -h --max-depth1 | sort -nr 5、查找/h…

MySQL数据库入门到大牛_基础_15_存储过程与函数

前面我们介绍了数据自带的函数&#xff0c;此处提到的函数&#xff0c;指的是用户自定义函数。存储函数是一定会有返回值的&#xff0c;存储过程是可以没有返回值的。 MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起&#xff0c;应用程序…