simplywatch
Version:
Watches files and upon change executes a command for each file INDIVIDUALLY with file-related params
48 lines (36 loc) • 1.27 kB
text/coffeescript
Promise = require 'bluebird'
chokidar = require '@danielkalen/chokidar'
chalk = require 'chalk'
debug = require('debug')('simplywatch:watch')
class Watcher
constructor: (useFsEvents)->
debug 'creating watcher'
@watchedFiles = []
@_watcher = chokidar.watch [],
'cwd': process.cwd()
'ignoreInitial': true
'ignored': /(?:\.git|node_modules|.+\.log)/
'bypassIgnore': @watchedFiles
'useFsEvents': useFsEvents
'awaitWriteFinish': false
@ready = new Promise (resolve)=>
@_watcher.on 'ready', resolve
setTimeout resolve, 1000
if process.platform is 'darwin' and not @_watcher.options.useFsEvents and useFsEvents
console.error "
#{chalk.bgRed.white.bold('Error')} FSEvents is not being used!
Falling back to unefficient manual polling method -
expect high CPU Usage for large directories. Run 'npm install fsevents' and re-run SimplyWatch
"
add: (path, prettyPath)-> unless @watchedFiles.includes(path)
debug "add #{chalk.dim prettyPath} to watchlist"
@watchedFiles.push(path)
@_watcher.add(path)
stop: ()->
debug 'destroying watcher'
@_watcher.close()
on: (event, callback)->
@_watcher.on event, callback
Object.defineProperty @::, 'options',
get: -> @_watcher.options
module.exports = Watcher