UNPKG

nyx_server

Version:

Node内容发布

71 lines (64 loc) 1.77 kB
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); }); }