nyx_server
Version:
Node内容发布
71 lines (64 loc) • 1.77 kB
JavaScript
var chokidar = require('chokidar');
var EventEmitter = require('events').EventEmitter;
var anymatch = require('anymatch');
var _ = require("lodash");
var Watch = function () {
this.files = {};
};
Watch.prototype = {
createWatch : function(){
var self = this;
if(!this.watch){
this.watch = chokidar.watch([], {ignoreInitial: true}).on('all', function(event , path) {
self.emit(event , path);
})
}
},
addPath: function () {
this.createWatch();
if(arguments.length < 2){
return;
}
var arr = [].slice.call(arguments, 0);
var callback = arr.splice(arr.length-1 , 1)[0];
for (var i = 0; i < arr.length; i++) {
var file = arguments[i];
if(_.isArray(file)){
file.push(callback);
this.addPath.apply(this , file);
continue;
}else{
this.watch.add(file);
}
var callbacks = this.files[file];
if(!callbacks){
callbacks = [];
this.files[file] = callbacks;
}
if(callbacks.indexOf(callback) < 0){
callbacks.push(callback);
}
}
},
emit: function (event, path) {
var keys = Object.keys(this.files);
for(var i=0 ; i<keys.length; i++){
var key = keys[i];
if (anymatch(key, path)) {
var cbs = this.files[key];
if(cbs && cbs.length>0){
cbs.forEach(function(cb){
cb(event , path);
})
}
}
}
}
};
module.exports = Watch;
if(!module.parent){
var watch = new Watch();
watch.addPath("/Users/qinfuji/study/nxy_gitclient_test/**/*.*" , function(event , path){
console.log("watch change file : " , path);
});
}