此特性取决于底层操作系统,提供了一种通知文件系统更改的方法。
- 在 Linux 系统上,使用 [
inotify(7)
]。 - 在 BSD 系统上,使用 [
kqueue(2)
]。 - 在 macOS 系统上,对文件使用 [
kqueue(2)
],对目录使用 [FSEvents
]。 - 在 SunOS 系统上(包括 Solaris 和 SmartOS),使用[事件端口][
event ports
]。 - 在 Windows 系统上,此特性取决于 [
ReadDirectoryChangesW
]。 - 在 Aix 系统上,此特性取决于 [
AHAFS
] 必须启动。 - 在 IBM i 系统上,不支持此特性。
如果底层功能由于某些原因不可用,则 fs.watch()
会无法运行且可能抛出异常。
例如,当使用虚拟化软件(如 Vagrant 或 Docker)时,在网络文件系统(NFS、SMB 等)或主文件系统上监视文件或目录可能是不可靠的,在某些情况下也是不可能的。
仍然可以使用 fs.watchFile()
,因为它使用 stat 轮询 ,但这种方法较慢且不太可靠。