使用 NodeJs 观看文件系统

使用 NodeJs 观看文件系统

监视文件系统意味着监视特定目录或文件的更改。

有时您可能需要持续观察特定文件或目录的更改。出于这个原因,我们使用文件系统观察器,如 乔基达 或内置的 NodeJs 文件系统方法 fs.watch() .

但是我们不会使用上面的方法,让我来告诉你这样做的原因。

fs.watch()

fs 提供了一个应用程序编程接口 (API),可以持续监控文件的更改。可以使用此方法跟踪文件更改,该方法返回一个 fs.FSWatcher 目的。在此处阅读有关它的更多信息 fs.watch() .

缺点:

  • 这种方法不可靠,每次修改都可能在监听器中显示多个事件。
  • 发出大多数更改为 改名 .
  • 不提供递归查看文件树的简单方法。
  • 不报告 MacOS 上的文件名。

还有很多…

乔基达

它是最流行的文件系统观察程序,但尽管在某些情况下它可能就足够了,但它并不完美。

优点:

  • 它支持处理符号链接。
  • 它有一些内置支持,可以在执行原子写入时处理写入磁盘的临时文件,尽管在 Watcher 中忽略它们也很简单,您可以通过 忽视 选项。
  • 它可以更可靠地观察网络连接的路径,尽管在观察大量文件时会导致性能问题。
  • 它经过了更多的战斗测试,虽然 观察者 (文件系统观察程序库,我们将在后面讨论)具有更全面的测试套件,并且也用于生产(例如 值得注意的 ,它正在使用 乔基达 前)。

缺点:

  • 它需要原生依赖才能在 macOS 下进行高效的递归观察,而原生依赖可能很难使用。
  • 它不能在 Windows 下有效地递归观看, 观察者 另一方面,(文件系统观察程序库,我们将在后面讨论)基于 Node 的 Windows 原生递归观察功能。
  • 它无法检测重命名。
  • 如果您不需要 globbing 之类的功能,那么 chokidar 会不必要地膨胀您的应用程序包。
  • EMFILE 错误没有得到正确处理,因此如果您观看的文件足够多,chokidar 最终会放弃它们。

因为每种方法都有自己的缺点。现在让我们来看看解决方案。

观察者

定义 ( 来自官方页面 ): 一个追求完美的文件系统观察者,没有原生依赖和可选的重命名检测支持。

我自己使用过这个库,与其他替代方案相比,我发现它非常简单且无错误。

特征:

  • 可靠的 :这个库旨在处理处理文件系统时可能出现的所有问题,包括一些最流行的不处理的替代方案,如 EMFILE 错误。
  • 重命名检测 :这个库可以选择性地检测文件和目录何时被重命名,这允许您在某些情况下为用户提供更好的体验。
  • 高性能 :在可用时使用本机递归监视(macOS 和 Windows),否则可以有效地手动执行。
  • 没有原生依赖 : 使用原生依赖可能会很痛苦,这个库使用了其中的 0 个。
  • 没有臃肿 :许多替代观察者附带了可能无用且昂贵的功能,例如对 globbing 的支持,这个库旨在更精简,同时仍然公开正确的抽象,让您可以根据需要使用 globbing。
  • TypeScript 就绪 :这个库是用 TypeScript 编写的,所以类型不是事后才想到的,而是随库一起提供的。

您可以看到与其他观察者的比较 这里 .

安装:

npm install — 保存观察者

用法:

你会像这样使用这个库:

而已!

阅读有关观察者的更多信息 这里 .

放弃您的意见或建议。

感谢您阅读到最后。更多类似这样的文章关注我或支持我 给我买咖啡 .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/36822/47151609

posted @ 2022-09-16 09:47  哈哈哈来了啊啊啊  阅读(54)  评论(0编辑  收藏  举报