base操作系统【Q123】如何监控文件的变动

如何监控文件的变动

更多描述 当一个文件或者一个目录下的文件有所变动时能够监控到。

如一些前端和后端项目在开发环境下会根据项目目录变动而重启或者重新编译

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 124

Author 回答者: shfshanyue

  1. 在 node 中调用 API fs.watch
  2. 在 linux 中原理是 inotify,macos 中原理是 FSEvents,windows 中原理是 ReadDirectoryChangesW
  3. 由于内核对文件监控更加细粒度,更加敏感,当每次修改文件时可能触发内核多次调用,需要防抖
  4. 注意软链接,读写权限等文件系统属性

可参考文章 How to Watch for Files Changes in Node.js精读《如何利用 Nodejs 监听文件夹》

Author 回答者: everlose

我不太清楚问这个的目的,是 fs.watch 吧?若要问的深一点底层怎么做的监听,我就不会了。贴一下答案?

Author 回答者: shfshanyue

@everlose 简单的总结了以下,见楼上

Author 回答者: yinzhixiaxue

chokidar这个包更好吧,我记得理论上它避免了fs.watch的一些坑,而且webpack底层用的也是这个,在mac和windows的兼容性应该都还行