reflux-core
Version:
A simple library for uni-directional dataflow application architecture inspired by ReactJS Flux
130 lines (78 loc) • 4.88 kB
Markdown
# reflux-core
A simple core library for unidirectional dataflow architecture inspired by [Flux](http://facebook.github.io/react/blog/2014/05/06/flux.html). This module does not depend on React and may be used together with other view engine libraries.
[![NPM Version][npm-image]][npm-url]
[![NPM Downloads][downloads-image]][npm-url]
[![Dependencies][dependencies-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Gratipay][gratipay-image]][gratipay-url]
[](https://saucelabs.com/u/reflux-core)
For an overview of reflux with react extensions, look at the [refluxjs repository][refluxjs-url].
Here are the [API docs](docs/api/Reflux.md) for reflux-core.
## Installation
You can currently install the package as an npm package.
### NPM
The following command installs `reflux-core` as an npm package:
npm install reflux-core
### ES5
Reflux depends on ES5 features. For older browsers that are missing them you will need a shim such as `core-js/es5` from [core-js](https://github.com/zloirock/core-js#ecmascript-5) or `es5-shim.js` from [kriskowal's es5-shim](https://github.com/kriskowal/es5-shim).
## Development
You need to have NodeJS installed.
1. Clone this repository
2. Run `npm install`
You can run the following npm scripts, for more check the project's `package.json` file.
* `npm compile` Use babel to transpile the ES6 code to ES5, output is `/lib`.
* `npm test` To run the jshint and tests
* `npm run watch` To run the watch task. It will lint, compile and test the code whenever a file is saved.
* `npm run benchmark` To run the benchmark test
[Husky git hooks](https://github.com/typicode/husky) will prevent bad commits or bad pushes for you by linting and testing the code.
## Extending `reflux-core`
### As an add-on
To create an add-on for Reflux, you may do that by creating a callback that `Reflux#use` can handle.
```javascript
// addon.js
// The callback recieves an instance of Reflux library that is being used.
export default function(Reflux) {
// add a simple function to Reflux
Reflux.createState = function() {
return {};
};
}
```
The user will have to do the following to use the add-on:
```javascript
import Reflux from "reflux-core";
// or "reflux" or any other reflux with extensions
import createStateAddon from "./addon.js";
Reflux.use(createStateAddon);
console.log(Reflux.createState());
// outputs {}
```
* When publishing the plugin to npm, you don't need to have `reflux-core` or `reflux` as a dependency among `dependencies` in `package.json` as the user provides the version they use through the `Reflux#use` method.
* If you're writing tests, you may want to use `reflux-core` and put it in `devDependencies` instead.
* You may name your library `reflux-addon-{name}`.
* Please do provide `reflux-addon` among `keywords` in `package.json` so that users can easily search for your addon in the npm registry.
### As extensions for a view library
Install reflux-core as a dependency and publish it as a library to npm. Here is an example entry point:
```javascript
// index.js
import Reflux from "reflux-core";
import frameworkExtras from "./framework-extras";
Reflux.use(frameworkExtras); // like an add-on
export default Reflux; // export the amended Reflux lib
```
* You may name your library `reflux-{view library}`. E.g. if you're doing mixins for angular then it may be named `reflux-angular`.
* Please do provide `reflux` among `keywords` in `package.json` so that users can easily search for your extensions in the npm registry.
## Colophon
[List of contributors](https://github.com/reflux/reflux-core/graphs/contributors) is available on Github.
This project is licensed under [BSD 3-Clause License](http://opensource.org/licenses/BSD-3-Clause). Copyright (c) 2014, Mikael Brassman.
For more information about the license for this particular project [read the LICENSE.md file](LICENSE.md).
This project uses [eventemitter3](https://github.com/3rd-Eden/EventEmitter3), is currently MIT licensed and [has it's license information here](https://github.com/3rd-Eden/EventEmitter3/blob/master/LICENSE).
[npm-image]: http://img.shields.io/npm/v/reflux-core.svg
[downloads-image]: http://img.shields.io/npm/dm/reflux-core.svg
[dependencies-image]: http://img.shields.io/david/reflux/reflux-core.svg
[npm-url]: https://www.npmjs.org/package/reflux-core
[travis-image]: http://img.shields.io/travis/reflux/reflux-core/master.svg
[travis-url]: https://travis-ci.org/reflux/reflux-core
[gratipay-image]: http://img.shields.io/gratipay/spoike.svg
[gratipay-url]: https://gratipay.com/spoike/
[refluxjs-url]: https://github.com/reflux/refluxjs#refluxjs