Description
Modern javascript application are more often organized in modules, they are awesome but they involve some problems that we cannot avoid. When we are writing an application in this way, we must consider that all our modules might be independent, testable, instantly re-usable and secure. Refraction purpose is making these things real in an easy way using some design patterns. Since modules might be independent, with no inter-module dependencies, refraction add an intermediate layer that handle all messages that an application use, to allow the communication between modules. In this way modules haven't to know each others but only this layer that is responsible to manage all the communications. If we want to change a module, we can do it without worries. Modules have a very limited knowledge of what's going in the rest of the system. For this reason we can define refraction as a guard, a central point of control.
Refraction alternatives and similar libraries
Based on the "Package Managers" category.
Alternatively, view Refraction alternatives based on common mentions on social networks and blogs.
-
jspm
DISCONTINUED. JSPM is an open source project for working with dependency management via import maps in browsers. -
Duo
DISCONTINUED. Next-generation package manager that blends the best ideas from Component, Browserify and Go to make organizing and writing front-end code quick and painless. -
corepack
Zero-runtime-dependency package acting as bridge between Node projects and their package managers -
volo
Create front end projects from templates, add dependencies, and automate the resulting projects
Nutrient - The #1 PDF SDK Library

* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Refraction or a related project?
Popular Comparisons
README
Refraction
A guard that represents a central point of control in your application.
Modern javascript applications are often organized into modules, which are awesome but have some problems that we can't avoid. When we are writing an application in this way, we must consider that all our modules must be independent, testable, instantly reusable and secure. Refraction's purpose is to make these concerns take care of themselves by using some design patterns. Since modules might be independent, with no inter-module dependencies, Refraction adds an intermediate layer that handles all messages that an application uses, allowing communication between modules. This way, modules don't need to know each other, only the layer that is responsible for managaging communication. If we want to change a module, we can do so without worrying about how other modules use it. Modules have a very limited knowledge of what's going in the rest of the system. For this reason, we can define refraction as a guard, a central point of control.
Installation
You can install Refraction using npm:
npm install --save refraction
If you aren't using npm in your project, you can include Refraction using UMD build in the dist folder with <script>
tag.
Usage
Refraction exposes only a small set of APIs. What is important to know is it's concept. A complete guide about usage can be found here. However, here is the gist:
import Refraction from 'refraction';
class CustomRefraction extends Refraction {
routeChange(route) {
this.publish('routeChange', {
type: 'route',
payload: route,
});
}
}
class RouteManager {
routeChange({ payload }) {
window.location.href = payload;
}
}
class ConsoleManager {
routeChange({ payload }) {
console.log(`New location = ${payload}`);
}
}
const routeMiddleware = (param) => {
const result = Object.assign({}, param);
if (result && result.type === 'route') {
// build complete url
result.payload = `${window.location.protocol}//${window.location.host}${result.payload}`;
}
return result;
}
const refractionInstance = new CustomRefraction([ routeMiddleware ]);
const routeManager = new RouteManager();
const consoleManager = new ConsoleManager();
refractionInstance.subscribe(routeManager);
refractionInstance.subscribe(consoleManager);
// change route and log
refractionInstance.routeChange('home');
Documentation
Examples
You can find a series of examples in this repository under the examples
folder. Alternatively, you can check awesome-refraction.
If you want to run examples, check out the instructions here.
Chat
This project has an official chat channel on gitter. This is the right place to talk about Refraction with us and others developers. Feel free to participate.
Join chat here.
Change Log
This project adheres to Semantic Versioning.
Every release, along with the migration instructions, is documented on the Github Releases page.
Inspiration
Refraction is inspired by different articles and tools:
- Its architecture is inspired by this article based on Addy Osmani's talk of the same name, presented at LondonJS.
- Its style is inspired by Redux
Authors
Matteo Basso
Adriano Buscema
Copyright and License
Copyright (c) 2016, Matteo Basso.
Refraction source code is licensed under the MIT License.
*Note that all licence references and agreements mentioned in the Refraction README section above
are relevant to that project's source code only.