diff --git a/lib/filechangeemitter.js b/lib/filechangeemitter.js index cf113f2..0e75693 100644 --- a/lib/filechangeemitter.js +++ b/lib/filechangeemitter.js @@ -10,7 +10,7 @@ * Module dependencies. */ -var fs = require('fs'), +var fs = require('fs'), EventEmitter = require('events').EventEmitter, basename = require('path').basename, extname = require('path').extname; @@ -29,34 +29,34 @@ var fs = require('fs'), */ var FileChangeEmitter = exports.FileChangeEmitter = function(files, options){ - + var self = this; EventEmitter.call(this); - + options = options || {}; var interval = options.interval || 100, extensions = options.extensions || ['.js'], openStat = 0; - + self.files = 0; - + if (!files) files = process.execPath; if (!Array.isArray(files)) files = [files]; //files.forEach(traverse); traverse( files, watch ); - + // traverse file if it is a directory // otherwise setup the watcher function traverse( files, fileCallback, level ) { //file = master.resolve(file); if ( !level ) level = 0; - for ( var i = 0; i < files.length; i++ ){ - var file = files[i]; + + function do_file(file) { fs.stat( file, function( err, stat ){ if ( !err ) { if ( stat.isDirectory() ) { - fs.readdir( file, function( err, files ){ - traverse( files.map( function( f ){ + fs.readdir( file, function( err, dirFiles ){ + traverse( dirFiles.map( function( f ){ return file + '/' + f; }), fileCallback, level+1 ); }); @@ -66,6 +66,10 @@ var FileChangeEmitter = exports.FileChangeEmitter = function(files, options){ } }); } + + for ( var i = 0; i < files.length; i++ ){ + do_file(files[i]); + } } // watch file for changes @@ -78,13 +82,13 @@ var FileChangeEmitter = exports.FileChangeEmitter = function(files, options){ } }); } - + // remove listeners function unwatch(file) { self.files--; fs.unwatchFile( file ); } - + self.close = function(){ traverse( files, unwatch ); };