Node学习笔记文件监听的实现
Posted 博读代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node学习笔记文件监听的实现相关的知识,希望对你有一定的参考价值。
前言
开发云盘的时候,使用到了依赖于 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 模块实现本地文件监听的分享,希望能给大家带来帮助。
下期给大家分享更多实战中的点滴,如果大家对此感兴趣,欢迎各位关注、留言,大家的支持就是我的动力!
以上是关于Node学习笔记文件监听的实现的主要内容,如果未能解决你的问题,请参考以下文章