根据API docs for Node 0.4.3,fs.watchFile(filename, [options], listener)
函数启动一个
关注
filename
的变化。每次访问文件时都会调用callback
侦听器。
它也说
如果提供的
options
应该是一个包含两个成员的对象,一个布尔值,persistent
和interval
,一个以毫秒为单位的轮询值
这表示它将根据间隔内的频率进行检查。但它也说
默认值为
{ persistent: true, interval: 0 }
。
这是否意味着它将检查每毫秒以查看文件时间是否已更改?它是否监听操作系统级事件?这有什么作用?
答案 0 :(得分:12)
是的,cpedros是正确的,这似乎是重复的。我想我可以对此有所了解。
每个操作系统都有自己的文件更改事件被触发。在Linux上,它是inotify(曾经是dnotify),在Mac上它是fsevents,而在Windows上它是FileSystemWatcher。我不确定底层代码是否处理每个案例,但这是一般的想法。
如果您只想在Linux上观看文件,我建议node-inotify-plus-plus。如果要查看目录,请使用inotify-plus-plus和node-walk。我已经实现了它,它就像一个魅力。
如果您有兴趣,我可以发布一些代码。 node-inotify-plus-plus背后的美妙之处在于它抽象了inotify的大部分内容,并提供了一个直观的API来监听文件中的特定事件。
编辑:这不应该用于观看大量的文件。在我的系统上,最大值为8192.使用此命令cat /proc/sys/fs/inotify/max_user_watches
可以找到最大值。这可以用于仅查看目录以进行更改,然后从中找出各个文件。如果直接在该目录下的文件被修改,则会触发修改后的事件。
编辑:感谢@guiomie指出现在Windows上完全支持观看文件。我假设这是v0.6.x版本。
答案 1 :(得分:3)
要扩展tjameson的精彩答案,您可以使用watchr来规范化节点versiosn和操作系统观察差异之间的API。它还为unlink
和new
而不仅仅是change
提供了事件,并添加了对目录树观看的支持。