| 
				
					 | 
			2 лет назад | |
|---|---|---|
| .. | ||
| config | 2 лет назад | |
| lib | 2 лет назад | |
| History.md | 2 лет назад | |
| LICENSE | 2 лет назад | |
| README.md | 2 лет назад | |
| app.js | 2 лет назад | |
| app.js | 2 лет назад | |
| package.json | 2 лет назад | |
File watcher plugin for egg
In worker process:
Start watching file(s).
Stop watching file(s).
In agent process:
Start watching file(s).
Stop watching file(s).
development ModeThere'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.
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:
// {plugin_root}/lib/custom_event_source.js
const Base = require('sdk-base');
class CustomEventSource extends Base {
  // `opts` comes from app.config[${eventSourceName}]
  // `eventSourceName` will be registered later in
  // `config.watcher.eventSources` as the key shown below
  constructor(opts) {
    super(opts);
    this.ready(true);
  }
  watch(path) {
    // replace this with your desired way of watching,
    // when aware of any change, emit a `change` event
    // with an info object containing `path` property
    // specifying the changed directory or file.
    this._h = setInterval(() => {
      this.emit('change', { path });
    }, 1000);
  }
  unwatch() {
    // replace this with your implementation
    if (this._h) {
      clearInterval(this._h);
    }
  }
}
module.exports = CustomEventSource;
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:
// config.default.js
exports.watcher = {
  eventSources: {
    custom: require('../lib/custom_event_source'),
  },
};
Choose to use your custom watching mode in your desired env.
// config.${env}.js
exports.watcher = {
  type: 'custom',
};
// this will pass to your CustomEventSource constructor as opts
exports.watcherCustom = {
  // foo: 'bar',
};
If possible, plugins named like egg-watcher-${customName}(egg-watcher-vagrant eg.) are recommended.
Please open an issue here.