使用Node.JS监听文件夹改变有许多应用场合,比如:

构建自动编绎工具

当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应的JS或CSS.

构建自动布署工具

通过侦听源文件夹的改变,你可以自动即时将改后的文件布署到测试服务器,加快你的开发测试速度。

这些工具其实都需要侦听文件夹的改变,基于Node.JS的侦听文件夹改变的模块有很多。

fs.watch

其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.watch

fs.watch('somedir', function (event, filename) {
console.log('event is: ' + event);
if (filename) {
console.log('filename provided: ' + filename);
} else {
console.log('filename not provided');
}
});

其中fs.watch的最大缺点就是不支持子文件夹的侦听,并且在很多情况下会侦听到两次事件(很多编辑器在保存的时侯是先把原文件清空,再进行保存,因此会触发两次文件夹改变事件)。因此需要一些开源的模块来监听文件夹目录的改变。

chokidar

chokidar  是一个基于node.JS的监听文件夹改变模块。

安装

npm install chokidar

示例

var chokidar = require('chokidar');

var watcher = chokidar.watch('file, dir, or glob', {
ignored: /[\/\\]\./, persistent: true
}); var log = console.log.bind(console); watcher
.on('add', function(path) { log('File', path, 'has been added'); })
.on('addDir', function(path) { log('Directory', path, 'has been added'); })
.on('change', function(path) { log('File', path, 'has been changed'); })
.on('unlink', function(path) { log('File', path, 'has been removed'); })
.on('unlinkDir', function(path) { log('Directory', path, 'has been removed'); })
.on('error', function(error) { log('Error happened', error); })
.on('ready', function() { log('Initial scan complete. Ready for changes.'); })
.on('raw', function(event, path, details) { log('Raw event info:', event, path, details); })

watch

Watch 是另一个监听文件夹改变的Node.JS模块

安装

npm install watch

npm install watch

示例,侦听所有改变事件

watch.watchTree('/home/mikeal', function (f, curr, prev) {
if (typeof f == "object" && prev === null && curr === null) {
// Finished walking the tree
} else if (prev === null) {
// f is a new file
} else if (curr.nlink === 0) {
// f was removed
} else {
// f was changed
}
})

示例,侦听不同事件

var watch = require('watch')
watch.createMonitor('/home/mikeal', function (monitor) {
monitor.files['/home/mikeal/.zshrc'] // Stat object for my zshrc.
monitor.on("created", function (f, stat) {
// Handle new files
})
monitor.on("changed", function (f, curr, prev) {
// Handle file changes
})
monitor.on("removed", function (f, stat) {
// Handle removed files
})
monitor.stop(); // Stop watching
})

最新文章

  1. Spring Data JPA @EnableJpaRepositories配置详解
  2. 跟我学Windows Azure 五 使用Cloub Service连接Blob Service完成图片的上传
  3. easyui numberbox一些常用属性,方法
  4. Docker容器基础知识学习
  5. UVa 11375 - Matches
  6. Codeforces Round #303 (Div. 2) C dp 贪心
  7. ASP.NET MVC 传值方法ViewData与ViewBag的区别
  8. 【边做项目边学Android】小白会遇到的问题--This Android SDK requires Android Developer Toolkit version 23.0.0 or above
  9. linq读书笔记2-查询内存中的对象
  10. UICollectionView在Swift3.0中的用法
  11. 华为上机题汇总----java
  12. jdk1.8新特性,还不知道的朋友还不看看,1.9都快出来了
  13. Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能
  14. Linux-day2-pdf课件
  15. C语言中负数的存储方式
  16. python使用sax实现xml解析
  17. rem+js响应式布局的设置
  18. WPF DataGrid中鼠标双击某一列,弹出窗体作为(增加、修改、详细)按钮的快捷键。
  19. java基础知识-比较运算符
  20. 【转】grep -v grep

热门文章

  1. sqlserver创建数据库
  2. Mysql 之多实例 安装以及配置
  3. All entities must be found CRM客户责任人变更报错
  4. ES6核心内容讲解
  5. ZooKeeper系列(5):管理分布式环境中的数据
  6. 使用Keepalived实现linux高可用集群
  7. Linux线程池的实现
  8. 逻辑卷(lv)管理(LVM)
  9. layer.js关闭子窗口及刷新父窗口
  10. 本地计算机上的OracleDBConsoleorcl服务启动后停止