Minimal and fast JavaScript / TypeScript event emitter for Node.js, Bun.js, Deno and front-end.
Only 1kb minified (577 bytes gzipped).
Used in prod on several projects (front-end and back-end) for over 10 years, very stable. API does not change, no breaking changes. 🚀
Via NPM
npm install evemit --save
Or download the evemit.min.js file.
If Evemit
is used in ESM or CommonJS environment (Node.js, Vite.js, Webpack, ...),
it is exposed as module with module.exports
.
So in CommonJS and ES Modules, evemit is not exposed in the global scope (even on client side) :)
import ev from 'evemit';
// or const ev = require('evemit');
// true (it's the constructor)
console.log(typeof ev === 'function');
// undefined, even on front-end with Browserify, Webpack, ...
console.log(typeof Evemit);
Basic usage (without builder)
// true
console.log(typeof Evemit === 'function');
// true
console.log(typeof window.Evemit === 'function');
import Evemit from 'evemit';
// Or if you are not in an environment CommonJS (Node.js, Browserify, Webpack, ...)
// uses directly `Evemit`, without `var Evemit = require('evemit')`
const obj = new Evemit();
obj.on('say-hello', function(hello) {
console.log(hello); // Hello World!
});
obj.emit('say-hello', 'Hello World!');
See the complete API doc.
Add a listener.
obj.on('say-hello', function(hello) {
console.log(hello); // Hello World!
});
obj.emit('say-hello', 'Hello World!');
Listen once
function myCallback(data) {
console.log(data.hello); // Hello 1
}
// Add listener, defined to be triggered "once"
obj.once('say-hello', myCallback);
// myCallback() is invoked and the listener is removed
obj.emit('say-hello', {
hello: 'Hello 1'
});
// myCallback() is not called because it is no longer listening on this event
obj.emit('say-hello', {
hello: 'Hello 2'
});
Emit an event
obj.emit('ping');
With arguments passed to the listeners
obj.emit('ping', 'arg1', 'arg2', {an: 'object'});
Remove a listener
function myCallback(data) {
// some code ...
}
// add
a.on('say-hello', myCallback);
// remove
a.off('say-hello', myCallback);
Get all listeners
// Returns an array containing all listeners
obj.listeners();
Count all listeners
// Returns a number.
obj.listeners().length;
Get all listeners of a given event
// Returns an array of listeners
obj.listeners('say-hello');
Count all listeners of a given event
obj.listeners('say-hello').length;
The methods of the Array
object can be used to manage the listeners.
Example
// reverse the order of the listeners execution
obj.listeners('my-event').reverse();
// slices
obj.listeners('my-event').slice(1, 3);
// Removes the first listener of the stack, and returns that listener
const firstListener = obj.listeners('my-event').shift();
// Removes the last listener of the stack, and returns that listener
const lastListener = obj.listeners('my-event').pop();
// ...
Use the property obj.events
if you want to get an object like
{event1: [array of listeners], event2: [array of listeners], ...}
evemit
is unit tested with Unit.js.
Run the tests
cd node_modules/evemit
npm test
To execute the tests on client side, download the test
directory and go on test/index.html file with your browser.
MIT (c) 2014, Nicolas Tallefourtane.
Nicolas Talle |