可用性
此功能取决于底层操作系统提供了一种通知文件系统更改的方法。
- 在 Linux 系统上,这使用
inotify(7)
。 - 在 BSD 系统上,这使用
kqueue(2)
。 - 在 macOS 上,这对文件使用
kqueue(2)
,对目录使用FSEvents
。 - 在 SunOS 系统(包括 Solaris 和 SmartOS)上,这使用
event ports
。 - 在 Windows 系统上,此功能取决于
ReadDirectoryChangesW
。 - 在 IBM i 系统上,不支持此功能。
例如,使用虚拟化软件(例如 Vagrant 或 Docker)时,在网络文件系统(NFS、SMB等)或主机文件系统上监视文件或目录可能不可靠,在某些情况下甚至是不可能的。
仍然可以使用 fs.watchFile()
,它使用 stat 轮询,但这种方法较慢且不太可靠。
This feature depends on the underlying operating system providing a way to be notified of filesystem changes.
- On Linux systems, this uses
inotify(7)
. - On BSD systems, this uses
kqueue(2)
. - On macOS, this uses
kqueue(2)
for files andFSEvents
for directories. - On SunOS systems (including Solaris and SmartOS), this uses
event ports
. - On Windows systems, this feature depends on
ReadDirectoryChangesW
. - On Aix systems, this feature depends on
AHAFS
, which must be enabled. - On IBM i systems, this feature is not supported.
If the underlying functionality is not available for some reason, then
fs.watch()
will not be able to function and may thrown an exception.
For example, watching files or directories can be unreliable, and in some
cases impossible, on network file systems (NFS, SMB, etc) or host file systems
when using virtualization software such as Vagrant or Docker.
It is still possible to use fs.watchFile()
, which uses stat polling, but
this method is slower and less reliable.