What is wolfy87-eventemitter?
The wolfy87-eventemitter package is a lightweight and flexible event emitter library for JavaScript. It allows you to create and manage custom events, making it easier to implement the observer pattern in your applications.
What are wolfy87-eventemitter's main functionalities?
Basic Event Emission
This feature allows you to create an event emitter instance, register an event listener, and emit an event. The listener will be triggered when the event is emitted.
const EventEmitter = require('wolfy87-eventemitter');
const emitter = new EventEmitter();
emitter.on('event', function() {
console.log('Event triggered!');
});
emitter.emit('event');
Event Emission with Arguments
This feature allows you to emit events with arguments. The registered listener can then access these arguments when the event is triggered.
const EventEmitter = require('wolfy87-eventemitter');
const emitter = new EventEmitter();
emitter.on('event', function(arg1, arg2) {
console.log('Event triggered with arguments:', arg1, arg2);
});
emitter.emit('event', 'arg1', 'arg2');
Removing Event Listeners
This feature allows you to remove specific event listeners. In this example, the listener is removed before the event is emitted, so the console log will not be triggered.
const EventEmitter = require('wolfy87-eventemitter');
const emitter = new EventEmitter();
function listener() {
console.log('Event triggered!');
}
emitter.on('event', listener);
emitter.off('event', listener);
emitter.emit('event');
Once Event Listeners
This feature allows you to register a listener that will only be triggered once. After the event is emitted the first time, the listener is automatically removed.
const EventEmitter = require('wolfy87-eventemitter');
const emitter = new EventEmitter();
emitter.once('event', function() {
console.log('Event triggered only once!');
});
emitter.emit('event');
emitter.emit('event');
Other packages similar to wolfy87-eventemitter
events
The 'events' package is the built-in Node.js event emitter module. It provides similar functionality to wolfy87-eventemitter but is more tightly integrated with the Node.js runtime. It is a good choice if you are already using Node.js and want a standard solution.
eventemitter3
The 'eventemitter3' package is another lightweight event emitter library for JavaScript. It is known for its performance and small footprint. Compared to wolfy87-eventemitter, it offers a similar API but is optimized for speed and efficiency.
mitt
The 'mitt' package is a tiny 200-byte functional event emitter. It is designed to be extremely lightweight and simple to use. While it offers fewer features than wolfy87-eventemitter, it is a great choice for projects where size and simplicity are critical.
Event based JavaScript for the browser
As the subtitle suggests, this script brings the power of events from platforms such as node.js to your browser. Although it can be used on any other platform, I just built it with browsers in mind.
This is actually the fourth full rewrite of EventEmitter, my aim is for it to be faster and lighter than ever before. It also has a remapped API which just makes a lot more sense. Because the methods now have more descriptive names it is friendlier to extension into other classes. You will be able to distinguish event method from your own methods.
I have been working on it for over a year two three years so far and in that time my skills in JavaScript have come a long way. This script is a culmination of my learnings which you can hopefully find very useful.
Dependencies
There are no hard dependencies. The only reason you will want to run npm install
to grab the development dependencies is to build the documentation or minify the source code. No other scripts are required to actually use EventEmitter.
Documentation
Examples
Contributing (aim your pull request at the develop
branch!)
If you wish to contribute to the project then please commit your changes into the develop
branch. All pull requests should contain a failing test which is then resolved by your additions. A perfect example was submitted by nathggns.
Testing
Tests are performed using Mocha and Chai, just serve up the directory using your local HTTP server of choice (http-server is probably a good choice) and open up tests/index.html
. You can also use the server scripts in the tools
directory.
Building the documentation
You can run tools/doc.sh
to build from the JSDoc comments found within the source code. The built documentation will be placed in docs/api.md
. I actually keep this inside the repository so each version will have it's documentation stored with it.
Minifying
You can grab minified versions of EventEmitter from inside this repository, every version is tagged. If you need to build a custom version then you can run tools/dist.sh
.
Cloning
You can clone the repository with your generic clone commands as a standalone repository or submodule.
git clone git://github.com/Wolfy87/EventEmitter.git
git submodule add git://github.com/Wolfy87/EventEmitter.git assets/js/EventEmitter
Package managers
You can also get a copy of EventEmitter through the following package managers:
Unlicense
This project used to be released under MIT, but I release everything under the Unlicense now. Here's the gist of it but you can find the full thing in the UNLICENSE
file.
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.
I gave people the chance to object in issue #84, which also explains my reasoning.