可用性


此功能取决于底层操作系统提供了一种通知文件系统更改的方法。

  • 在 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 and FSEvents 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.