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

这是之前问题的升级版: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,欢迎推荐更好用的库。

阅读 2.9k
1 个回答

用正则:

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

或者用绝对路径;

ignored: ["C:/node_modules/**", "C:/.git/**", "C:/pagefile.sys"],
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题