Universal Redux
![Demo on Heroku](https://img.shields.io/badge/demo-heroku-brightgreen.svg?style=flat-square)
With the default configuration, Universal Redux provides routing with React Router as well as a hot-reloading development server. Fonts and styles (SASS, Less, CSS) are also ready to go.
There is an example project which is continuously deployed on Heroku.
Usage
npm install universal-redux
The following npm bin aliases have been defined:
universal-redux-dev
universal-redux-watch
universal-redux-server
universal-redux-build
You'll generally call these from the corresponding section of your project's scripts. See package.json
in the example project.
Generally kept in src/routes.js
, this is where you define what routes map to what views. See routes.js
in the example project.
Customization
The npm module also exposes a few ways of integrating your code with that of the module.
Webpack configuration
Any items specified in the webpack.config
of your configuration will be merged with the default Webpack configuration. You may also turn on verbose
mode to see the exact Webpack configuration you are running.
Express middleware
You can add your own Express middleware like so:
import universal from 'universal-redux';
import config from '../config/universal-redux.config.js';
const app = universal.app();
// add some middleware
// add some more middleware
universal.setup(config);
universal.start();
Alternatively, you may pass your own Express instance as a parameter when calling universal.app()
.
Redux middleware
You can activate your own Redux middleware by specifying the middleware
property in the configuration file. This must be a path to a file which exports each middleware as a function. On serverside renders, those functions will be called with two parameters: the Express request and response objects. On clientside renders, they will be called with none. All properties specified in globals
will be available to the middleware.
Replacing the HTML shell
You can specify htmlShell: '/path/to/your/Html.js'
in your configuration and this will be used instead of the default one. This allows you to add your own additions to <head>
as well as third party <script>
tags such as for metrics tracking.
Webpack Isomorphic Tools configuration
You can add or override the default webpack-isomorphic-tools configuration, by providing a toolsConfigPath
value to your config.js
.
Local development
If you'd like to develop on Universal Redux, clone the repo and while testing with a project that uses it, you can run PROJECT_PATH=/path/to/project npm run dev
from the Universal Redux root, which will watch for changes and copy them over to your project's node_modules/universal-redux/lib
directory. If any of your changes add dependencies, you will need to copy those over manually.
Todo
Inspirations
This project forked off of react-redux-universal-hot-example. Please refer to the README there for more details and join the discussion at the pull request.