Package detail

egg-watcher

eggjs96.5k3.1.1

file watcher plugin for egg

egg-watcher, egg, watcher, watch

readme

egg-watcher

File watcher plugin for egg

NPM version build status Test coverage David deps Known Vulnerabilities npm download

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:

// {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.

Questions & Suggestions

Please open an issue here.

License

MIT

changelog

3.1.1 / 2020-03-26

fixes

others

3.1.0 / 2018-09-20

others

3.0.0 / 2017-11-10

others

2.2.0 / 2017-09-08

  • feat: add event source event logs (#9)

2.1.3 / 2017-06-04

  • docs: fix License url (#8)

2.1.2 / 2017-05-03

  • chore: upgrade dependencies (#7)

2.1.1 / 2017-04-13

  • fix: should support watch one file multiple times (#6)
  • test: add config.keys to fix tests (#5)

2.1.0 / 2017-02-17

  • feat: pass custom options (#4)
  • docs: how to customize event source (#3)

2.0.0 / 2017-01-25

  • feat: [BREAK CHANGE] use cluster-client (#2)

1.0.0 / 2016-07-20

  • Initial commit