chokidar.watch 如何忽略文件?ignored无效?

作者站长头像
站长
· 阅读数 7

这是之前问题的升级版:https://segmentfault.com/q/1010000044101528

最后发现报错的是chokidar

chokidar.watch(dirPath, {
    persistent: true, // 保护进程不退出持久监听,默认值为true
    // 完全无效
    ignored: ["**/node_modules/**", "**/.git/**", "**/pagefile.sys"], // 忽略文件
    // ignored: path => ["node_modules", ".git", "pagefile.sys"].some(s => path.includes(s)), 
    cwd: ".", // 表示当前目录
    depth: 0, // 只监听当前目录不包括子目录
})

报错信息:

[Window Title]
Error

[Main Instruction]
A JavaScript error occurred in the main process

[Content]
Uncaught Exception:
Error: EBUSY: resource busy or locked, lstat 'c:\pagefile.sys'

[确定]

我要做一个类似资源管理器的列表,所以排除某文件的方式是最后的无奈之举

所以会有监听磁盘根目录的需求,但不少文件是被占用的,比如pagefile.sys,这是系统的分页文件,我们不能对它做任何处理。

我需要得到的文件信息有:

  • 文件名
  • 后缀
  • 大小
  • 创建时间
  • 修改时间

大小、时间不要求实时,都是排序用的

但如上所述,会报EBUSY错误。fs.statSync也会报此类错误。

我不关心文件内容,请问有解决方法吗?

不要求用chokidar,欢迎推荐更好用的库。

回复
1个回答
avatar
test
2024-06-29

用正则:

chokidar.watch(dirPath, {
  ignored: /node_modules|\.git|pagefile\.sys/,
  //...
});

或者用绝对路径;

ignored: ["C:/node_modules/**", "C:/.git/**", "C:/pagefile.sys"],
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容