8

【Node学习笔记】chokidar模块实现文件监听

 1 year ago
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模块实现文件监听

原创

博读代码 2022-07-06 16:39:36 博主文章分类:Node ©著作权

文章标签 本地文件 node.js 文件监听 文章分类 Node.js 前端开发 私藏项目实操分享 阅读数167

开发云盘的时候,使用了 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 chokidar from "chokidar";
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 模块实现本地文件监听的分享,希望能给大家带来帮助。

下期给大家分享更多实战中的点滴,如果大家对此感兴趣,欢迎各位关注、留言,大家的支持就是我的动力!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK