I want to emit events from one file/module/script and listen to them in another file/module/script. How can I share the emitter variable between them without polluting the global namespace?
Thanks!
You can pass arguments to require calls thusly:
var myModule = require('myModule')(Events)
And then in "myModule"
module.exports = function(Events) {
// Set up Event listeners here
}
With that said, if you want to share an event emitter, create an emitter object and then pass to your "file/module/script" in a require call.
Though correct, this is a code smell as you are now tightly coupling the modules together. Instead, consider using a centralized event bus that can be required into each module.
Why not use the EventEmitter of the global process object?
process.on('customEvent', function(data) {
...
});
process.emit('customEvent', data);
Pro: You can disable or completely remove a module (for instance a tracker), without removing all your tracking code within your routes. I'm doing exactly that for node-trackable.
Con: I don't now, but please let me know if you see a catch here ;-)