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学习笔记文件监听的实现的主要内容,如果未能解决你的问题,请参考以下文章

ROS学习笔记(18)tf坐标系广播与监听的编程实现

「Node学习笔记」Node.js的模块实现及编译

Nodejs学习笔记

JavaWeb学习笔记-15监听器

nodejs入门学习笔记二——解决阻塞问题

nodejs学习笔记 --回调函数