使用 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 版权协议,转载请附上原文出处链接和本声明