@eggjs/watcher

File watcher plugin for egg
Usage
In worker process:
app.watcher.watch(path, listener)
Start watching file(s).
- path(String|Array): file path(s)
- listener(Function): file change callback
app.watcher.unwatch(path[, listener])
Stop watching file(s).
- path(String|Array): file path(s)
- listener(Function): file change callback
In agent process:
agent.watcher.watch(path, listener)
Start watching file(s).
- path(String|Array): file path(s)
- listener(Function): file change callback
agent.watcher.unwatch(path[, listener])
Stop watching file(s).
- path(String|Array): file path(s)
- listener(Function): file change callback
Watching mode
development Mode
There's a built-in development mode which works in local(env is local). Once files on disk is modified it will emit a change event immediately.
Customize Watching Mode
Say we want to build a custom event source plugin (package name: egg-watcher-custom, eggPlugin.name: watcherCustom).
Firstly define our custom event source like this:
import { Base } from 'sdk-base';
export default class CustomEventSource extends Base {
constructor(opts) {
super(opts);
this.ready(true);
}
watch(path) {
this._h = setInterval(() => {
this.emit('change', { path });
}, 1000);
}
unwatch() {
if (this._h) {
clearInterval(this._h);
}
}
}
Event source implementations varies according to your running environment. When working with vagrant, docker, samba or such other non-standard way of development, you should use a different watch API specific to what you are working with.
Then add your custom event source to config:
import CustomEventSource from '../lib/custom_event_source';
export default {
watcher: {
eventSources: {
custom: CustomEventSource,
},
},
};
Choose to use your custom watching mode in your desired env.
export default {
watcher: {
type: 'custom',
},
watcherCustom: {
},
};
If possible, plugins named like egg-watcher-${customName}(egg-watcher-vagrant eg.) are recommended.
Questions & Suggestions
Please open an issue here.
License
MIT
Contributors

Made with contributors-img.