使用Node.JS监听文件夹变化

使用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
})
时间: 2024-12-09 07:01:15

使用Node.JS监听文件夹变化的相关文章

node.js 监听文件变化并打印

1 Use node.js library "chokidar"2 Detail code: var watcher = chokidar.watch("/home/camille/Downloads", { ignored: /[\/\]./, persistent: true }); var log = console.log.bind(console); watcher .on('add', function(path) { log('File', path,

Android 监听文件夹

在一次Android和pc端的通讯过程中,我们放弃了adb forward来实现socket通讯.而是使用adb push文件,我监听文件夹... 都学习一下很有必要 本篇简单Android监听文件夹的方式FileObserver. FileObserver简介 Android.os包下的FileObserver类是一个用于监听文件访问.创建.修改.删除.移动等操作的监听器,基于Linux的INotify. FileObserver是个抽象类,必须继承它才能使用.每个FileObserver对象

kafka flumn sparkstreaming java实现监听文件夹内容保存到Phoenix中

ps:具体Kafka Flumn SparkStreaming的使用  参考前几篇博客 2.4.6.4.1 配置启动Kafka (1) 在slave机器上配置broker 1) 点击CDH上的kafka进入kafka功能界面,切换到实例页签,点击下方的“添加角色实例”进入添加角色实例界面. 2) 进入添加角色界面,点击Kafka Broker下面的选择主机 3) 进入选择主机界面,将主机全选,之后点击确定 (2) 启动Kafka (3) 创建主题,主题名为井名,有几个井创建几个对应的主题. 进入

Node.js之删除文件夹(含递归删除)

应用场景:比如像Eclipse这样的IDE,右击项目,出现选项,点击选项中的删除,就可以删除这个项目及其下的子目录包含文件(使用electron开发的桌面端项目多少都会用到). 核心代码如下: /** * * @param {*} url */ function deleteFolderRecursive(url) { var files = []; /** * 判断给定的路径是否存在 */ if (fs.existsSync(url)) { /** * 返回文件和子目录的数组 */ files

如何使用NodeJs来监听文件变化

1.前言 在我们调试修改代码的时候,每修改一次代码,哪怕只是很小的修改,我们都需要手动重新build文件,然后再运行代码,看修改的效果,这样的效率特别低,对于开发者来说简直不能忍. 2.构建自动编译工具 如何使用nodeJs来监听文件变化,一旦源文件修改保存时,自动运行build过程.比如当你写CoffeeScript文件或SASS文件时,保存之后可即时生成对应的JS或CSS. 基于Node.JS的侦听文件夹改变的模块有很多. a .  fs.watch.Node.JS的文件系统也可侦听某个目录

gulp监听文件变化,并拷贝到指定目录(转)---参考记录

###暂时不支持目录修改.创建.删除.var gulp = require('gulp'); var fs = require('fs'); var path = require('path'); var less = require('gulp-less'); var sass = require('gulp-sass'); var minifycss = require('gulp-minify-css'); var concat = require('gulp-concat'); var

gulp监听文件变化,并拷贝到指定目录

暂时不支持目录修改.创建.删除. var gulp = require('gulp'); var fs = require('fs'); var path = require('path'); var less = require('gulp-less'); var sass = require('gulp-sass'); var minifycss = require('gulp-minify-css'); var concat = require('gulp-concat'); var ug

js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange

本文转载于 http://blog.163.com/lgh_2002/blog/static/44017526201341511112874/ Jquery绑定事件(bind和live的区别) js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange 2013-05-15 11:01:12|  分类: jquery/javascrip |

js监听输入框值的即时变化onpropertychange、oninput

js监听输入框值的即时变化onpropertychange.oninput 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感. 要达到的效果 很多情况下我们都会即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.比如即时显示输入框已经被输入的字节数,或者即时读取输入的值来进行搜索引导,也就是google的关联搜索效果等. 只要我们能捕获即时事件就能做到很多事情. 需要了解的知识 首先,我们需要了解onchange和onpropert