Currently, once the app is running, it's pretty difficult to unregister Feathers services and hooks.
We would like to be able to support unregistering all event handlers associated with a route, so we can recreate and re-register them while the server keeps running. If we do this right, it will enable people to use hot reloading techniques such as Webpack's Hot Module Replacement with their Feathers services and hooks.
API suggested by @daffl in Slack:
app.service('/myservice', null)
would completely undo the effects of
app.use('/myservice', myservice)
...and thus allow us to use HMR like this:
services/myservice/index.js
'use strict';
let app; // hang on to the app object
module.exports = function(){
app = this;
register()
};
function register() {
// re-require on every invocation to facilitate HMR
// `require` caches modules once loaded, so second require is fast.
const hooks = require('./hooks');
const Service = require('./service');
app.use('/myservice', new Service());
const service = app.service('/myservice');
service.before(hooks.before);
service.after(hooks.after);
}
function unregister() {
app.service('/myservice', null);
}
if (module.hot) {
module.hot.accept(['./hooks', './service'], function(){
unregister(); // unregister the old service and hooks
register(); // ..and register the new ones.
})
}
// not sure if it's useful to keep this next line... modules referencing
// `Service` would need to make sure they get the new one somehow...
// module.exports.Service = Service;
Currently, once the app is running, it's pretty difficult to unregister Feathers services and hooks.
We would like to be able to support unregistering all event handlers associated with a route, so we can recreate and re-register them while the server keeps running. If we do this right, it will enable people to use hot reloading techniques such as Webpack's Hot Module Replacement with their Feathers services and hooks.
API suggested by @daffl in Slack:
would completely undo the effects of
...and thus allow us to use HMR like this:
services/myservice/index.js