

【Node学习笔记】chokidar模块实现文件监听
source link: https://blog.51cto.com/u_15345191/5447768
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【Node学习笔记】chokidar模块实现文件监听
原创开发云盘的时候,使用了 Node.js 的 chokidar 模块做本地文件监听,获取文件修改的触发事件,下面来给大家介绍一下涉及的知识点以及实现过程。
chokidar.watch(paths, [options]) 返回一个chokidar构造监听实例
参数:paths
一个字符串或者是一个数组,描述监听的文件或者文件夹的路径。
.add 新增文件时触发
.addDir 新增文件夹的时候触发
.unlink 对应的文件的删除
.unlinkDir 对应的文件夹的删除
.change 文件内容改变时触发
.all(除了ready, raw, and error之外所有的事件类型)包含:add、addDir、unlink、unlinkDir、change
.ready 初始化完成
.raw 原始事件
.error 捕获error
.unwatch(path / paths) 停止监听传入文件/文件夹
.close() 从监视文件中移除/关闭所有侦听器
.getWatched() 返回此FSWatcher实例正在监视的文件系统上所有路径的对象
监听文件样例代码
import { ipcRenderer } from "electron";
import fs from "fs";
let watcher: any = null;
export const addFileToWatcher = (localPath: string) => {
if (watcher) {
watcher.add(localPath);
} else {
watcher = chokidar.watch(localPath);
watcher.on("all", (event: any, path: string) => {
//监听除了ready, raw, and error之外所有的事件类型
console.log(event, path);
});
watcher.on("ready", (path: string) => {
console.log("ready", path);
});
watcher.on("add", (path: string) => {
console.log("增加监听", path);
console.log(watcher.getWatched());
});
watcher.on("change", (path: string) => {
const token = localStorage.getItem("token");
console.log("监听+文件更新:" + path);
ipcRenderer.send("fileChange", path.replaceAll("\\", "/"), token);
});
watcher.on("unlink", (path: string) => {
watcher.unwatch(path);
if (fs.existsSync(path)) {
watcher.add(path);
const token = localStorage.getItem("token");
console.log("文件保存:" + path);
ipcRenderer.send("fileChange", path.replaceAll("\\", "/"), token);
}
});
}
};
export const removeFileWathcer = (localPath: string) => {
console.log('watcher',watcher)
if (watcher) {
console.log("移除监听-", localPath);
watcher.unwatch(localPath);
}
};
实现文件监听时,出现了系统兼容性的问题,有的电脑会出现文件修改不触发change,而是触发了 unlink 事件的情况。因此,在 unlink 事件里做了补充,当文件存在时触发更新。
以上就是本期关于 chokidar 模块实现本地文件监听的分享,希望能给大家带来帮助。
下期给大家分享更多实战中的点滴,如果大家对此感兴趣,欢迎各位关注、留言,大家的支持就是我的动力!
Recommend
-
4
手机APP监听用户电话?央视调查:能实现,但没必要-极果 手机APP监听用户电话?央视调查:能实现,但没必要...
-
11
使用Go实现可用select监听的队列 三月 26, 2021 0 条评论 1. 背景与选型 和
-
4
File watching with chokidar — Sebastian De DeyneFile watchers are powerful tools. We take them for granted because they’re often baked in, like Webpack rebuilding when you save a file.Sometimes I’m in an environment without auto-r...
-
7
这篇是正式阅读的第一篇,从最简单的path开始阅读,我记得之前在掘金收藏过node源码阅读的文章,想找来看看它们的写作思路,发现早就已经取消收藏了(大概是因为质量不高)。不过这样也好,不受到其他人思路的干扰,我的文章输出我自己的阅读收获,先尽量保持清...
-
13
Hello 大家好,我是阿粉。不知道大家在日常的工作中有没有遇到这样的场景,很多时候业务数据有变更需要及时加载到缓存、ES 或者发送到消息队列中通知下游服务。 一般遇到这种情况下,在实时性要求不高的场景我们有两种处理模式,一种是写...
-
5
为什么Vue3.0 不再使用defineProperty实现数据监听其实这个问题很多文章都有写,也是面试的高频题目,这里仅仅是记录下自己的理解。Proxy和Object.defineprope...
-
11
Next.js 提供了 Fast-Refresh 能力,它可以为您对 React 组件所做的编辑提供即时反馈。 但是,当你通过 Markdown 文件提供网站内容时,由于 Markdown 不是 React 组件,热更新将失效。 解决该问题可从以下几方面思考: 服务器如何监控文...
-
4
【python小脚本】监听日志文件异常数据发送告警短信 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。——–王小波
-
7
【笔记】Nodejs的moment模块学习笔记 2022-12-11 Nodejs中利用moment模块进行时间日期格式化 npm install moment ...
-
13
通过Nodejs的mysql模块操作Mysql数据库实现CRUD npm install mysql 引入模块并配置const mysql = require("mysql");const db = mysql.createPool({ host: "127.0.0.1",
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK