watch
1 #!/usr/bin/env node 2 3 var argv = require('minimist')(process.argv.slice(2)) 4 var execshell = require('exec-sh') 5 var path = require('path') 6 var watch = require('./main.js') 7 8 if(argv._.length === 0) { 9 console.error([ 10 'Usage: watch <command> [...directory]', 11 '[--wait=<seconds>]', 12 '[--filter=<file>]', 13 '[--interval=<seconds>]', 14 '[--ignoreDotFiles]', 15 '[--ignoreUnreadable]', 16 '[--ignoreDirectoryPattern]' 17 ].join(' ')) 18 process.exit() 19 } 20 21 var watchTreeOpts = {} 22 var command = argv._[0] 23 var dirs = [] 24 25 var i 26 var argLen = argv._.length 27 if (argLen > 1) { 28 for(i = 1; i< argLen; i++) { 29 dirs.push(argv._[i]) 30 } 31 } else { 32 dirs.push(process.cwd()) 33 } 34 35 var waitTime = Number(argv.wait || argv.w) 36 if (argv.interval || argv.i) { 37 watchTreeOpts.interval = Number(argv.interval || argv.i || 0.2); 38 } 39 40 if(argv.ignoreDotFiles || argv.d) 41 watchTreeOpts.ignoreDotFiles = true 42 43 if(argv.ignoreUnreadable || argv.u) 44 watchTreeOpts.ignoreUnreadableDir = true 45 46 if(argv.ignoreDirectoryPattern || argv.p) { 47 var match = (argv.ignoreDirectoryPattern || argv.p).match(/^\/(.*)\/([gimuy]*)$/); 48 watchTreeOpts.ignoreDirectoryPattern = new RegExp(match[1], match[2]) 49 } 50 51 if(argv.filter || argv.f) { 52 try { 53 watchTreeOpts.filter = require(path.resolve(process.cwd(), argv.filter || argv.f)) 54 } catch (e) { 55 console.error(e) 56 process.exit(1) 57 } 58 } 59 60 var wait = false 61 62 var dirLen = dirs.length 63 var skip = dirLen - 1 64 for(i = 0; i < dirLen; i++) { 65 var dir = dirs[i] 66 console.error('> Watching', dir) 67 watch.watchTree(dir, watchTreeOpts, function (f, curr, prev) { 68 if(skip) { 69 skip-- 70 return 71 } 72 if(wait) return 73 74 execshell(command) 75 76 if(waitTime > 0) { 77 wait = true 78 setTimeout(function () { 79 wait = false 80 }, waitTime * 1000) 81 } 82 }) 83 }