Information
Package | watch-network |
Description | Execute tasks based on file events received over the network - gulpfriendly |
Scenario: You use Vagrant/VirtualBox in your workflow to have services and configurations in an encapsulated environment. For developing purposes you now sync a local directory into the VM using vboxfs, nfs, rsync or similar. In your VM you want to use watcher facilities for developing-concerns, but for some reason triggering inotify over the network seems to be troublesome or unreliable.
Solution: Based on the Listen Feature "Forwarding file events over TCP" watch-network
will connect to a Listen broadcaster as a receiver and watch for File Events. Upon receiving a File Event it will execute tasks
based on patterns
. Vagrants rsync-auto is based on Listen TCP too.
If you're looking for an alternative Listen implementation in Go, there's GoListen
which has also a guide on how you can use it with watch-network
.
Setup Listen
Listen Version >= 2.8 required
The listen gem provides the listen
executable. So you need to install
gem install listen
or just bundle with the provided Gemfile
bundle
To start the listen broadcast process inside your local project directory you then can
listen -v -d .
Install
npm install watch-network
Usage
WatchNetwork = ; watch = ; watch; watch;
Usage with Gulp
gulp = ;gulp; WatchNetwork = ; watch = ; watch; watch;
Note: If you define a task with the same name on the watcher and on gulp - both will get executed. On the watcher defined tasks execute first.
API
WatchNetwork
Params:
host
String Listen Host to connect to (default'localhost'
)port
String|Number Listen Port to connect to (default4000
)rootFile
String Name of the RootFile which determines the basepath (relevant forpatterns
) (default'.root'
)flushDeferredTasks
Boolean Wether to flush tasks which got deferred while other tasks are already running (defaulttrue
)gulp
Object Gulp Object with defined Tasks which will get executed with run-sequence (defaultnull
)configs
Array Contains Pattern/Task Configuration Objectpatterns
String|Array Pattern to match against FileChange based on minimatchtasks
String|Array Tasks to execute if patterns matchonLoad
Boolean Wether to execute thetasks
once whileinitialize
-Phase (defaultfalse
)
initialize
Initialize the Watcher.
Params:
- callback Function Callback which gets called after the Watcher initialized
task
Define Task Function which gets executed if patterns match
Params:
- taskName String Name of the task
- taskFunction Function Task Function
stop
Stops the watcher by destroying the listen socket and removing all event listeners. Be sure to cleanup the watcher instance yourself.
on
Register Event Listener
Params:
- eventName String Name of the event
- subscriberFn Function Function which gets called when event fires
Example:
watch = ;watch;watch;watch
Note: WatchNetwork extends EventEmitter
Available Events
initialized
Watcher initialized (RootFile-Sync completed)changed
Watcher detected file changes, first parameter will include the changed files as an array
Determining Base Path
Given
- we have a local working directory:
/home/wn/work
- we have a synced version inside the VM:
/vagrant
Now if we initialize WatchNetwork inside the VM it does the following:
- Touch the
RootFile
(defaultprocess.cwd()
+rootFile
) - Wait for FileChange which contains
.root
- Compute RemoteRoothPath (basedir of RootFile):
/home/wn/work
- Initialized.
- On follow-up FileChanges we will strip the RemoteRootPath
- Changing
/home/wn/work/foo.js
- What gets matched against the patterns is
foo.js
then
- Changing
License
Licensed under the MIT license.