I started this project to learn tools like React, Redux, Webpack, babeljs.io, ES6/ES2015... I did it mainly for fun. But it will be maintained and then I used it as Boilerplate for my React|Redux projects. So don't worry it works :p. It's not perfect but it works :).
Enjoy it! :)
An Universal ReactJS/Redux Boilerplate.
Node
>=7.6.0
$ git clone https://github.com/kiki-le-singe/react-redux-universal-boilerplate.git <name>
$ cd <name>
$ npm install or yarn
$ on postinstall you should choose between SASS or CSSNEXT
$ npm run storybook
Starts Storybook on `http://localhost:6006/``
$ npm run setup
Allows to choose between sass or cssnext and clean up unnecessary files. This question you will be asked: You will use SASS as CSS extension language �� . Do you wish to use CSSNEXT �� ? This choice is irreversible. Obviously you can install the project again or just use your version control system to discard changes in working directory.
This script runs on postinstall script (see package.json).
$ npm run dev
Serves your app at localip:3000
. HMR will be enabled in development. A proxy is used for when you request http://localip:3000/, it will fetch http://localip:3001/ and return.
$ npm start
Runs npm run dev
script.
$ npm run start:server
Starts the dev
server with nodemon to serve your app at localip:3000
.
$ npm run start:client:server
Starts the webpack dev server
to serve your webpack bundle
at localip:3001
and enable HMR in development.
$ npm run build:client
It does some optimizations and compiles the client app, for the production, to disk (~/readyToDeploy/static/dist
).
$ npm run build:server
It does some optimizations and compiles the server app, for the production, to disk (~/readyToDeploy/server.js
).
$ npm run deploy
Runs npm run build:client
and npm run build:server
scripts.
$ cd readyToDeploy
$ npm install or yarn
$ npm start
Starts the prod
server to serve your app at localip:3000
.
$ npm run test
Runs unit tests with Karma. It will generate a coverage report to ~/coverage
.
$ npm run test:dev
Same as npm run test
except it watches for changes to re-run tests.
$ npm run lint
Lint all files in ~/src
and ~/__tests__
.
Runs npm run deploy
and everything is in the ~/readyToDeploy
folder.
You can read the README.
You should just install an extension Redux DevTools Extension.Personally I use Redux DevTools for Chrome
Are there any other alternatives? Sure!You can also use Redux DevTools. And there is also a small logger middleware
redux-logger
to log all actions and states after they are dispatched.
2.0.5
** )CSSNEXT
You can use .css
file extensions using the latest CSS syntax with postcss-cssnext
.
SASS
You can use scss.|css
file extensions using the sass syntax with sass
.
CSS are automatically autoprefixed. You don't need to add prefixes like
-webkit
.See:
- automatic vendor prefixes from
postcss-cssnext features
- Autoprefixer (used for sass mode)
See the ~/src/common/styles/global
directory to implement global styles (site's theme for example) and see an example of use case css module ~/src/common/views/AboutView
. There is also a ~/src/common/styles/local
directory for common local styles (this could allow to use css modules' composition between components).
Are there any other solutions ? Fortunately yes!
I could try one of these following options if what I implemented doesn't work very well...
css-modules
for Theming
.foo-namespace {
.baz {
...
}
.bar {
...
}
}
<div className="foo-namespace">
<div className="baz">baz</div>
<div className="bar">bar</div>
</div>
These are global variables available to you anywhere in your source code. They can be found in ~/config/index.js
.
new webpack.DefinePlugin({
__CLIENT__: projectConfig.__CLIENT__,
__SERVER__: projectConfig.__SERVER__,
__DEV__: projectConfig.__DEV__,
__PROD__: projectConfig.__PROD__,
})
Webpack is made for client side code development only. So we also have to define them on the server side
/**
* Define isomorphic constants.
*/
// src/server/index.js
global.__CLIENT__ = false
global.__SERVER__ = true
global.__DEV__ = projectConfig.__DEV__
global.__PROD__ = projectConfig.__PROD__
Tests are in ~/__tests__
. Mocha will be used for structuring tests, karma as the test runner, Chai for assertions, Sinon.JS for spies... And Enzyme to simplify testing react components.
new webpack.IgnorePlugin(/\.(css|less|scss|jpg|png|...)$/)
Message received from Webpack via terminal:WARNING in asset size limit: The following asset(s) exceed the recommended size limit (250 kB)
react-redux提供两个核心的api: Provider: 提供store <Provider store = { store }><App /></store> connect: 用于连接容器组件和展示组件 Provider 根据单一store原则 ,一般只会出现在整个应用程序的最顶层。 connect 语法格式为 connect(mapStateToProps?, mapDispatch
问题: no suitable image found ERROR in dlopen(/Users/xxx/web/react-redux-universal-hot-example/node_modules/node-sass/vendor/darwin-x64-48/binding.node, 1): no suitable image found. Did find: [0]
react native redux read: http://jo.wtf/react-native-redux-tutorial-concepts/ [http://jo.wtf/comprehensive-react-native-redux-tutorial/]( http://jo.wtf/comprehensive-react-native-redux-tutorial/) [http
Universal React Redux Boilerplate A universal React/Redux boilerplate with sensible defaults. Out of the box, thisboilerplate comes with: Server-side rendering with Express Code splitting with dynamic
Simple Universal React Redux The simplest possible Async Universal React & Redux boilerplate. This repo is an attempt to make the simplest server-side rendered (universal) async React Redux app. Boile
�� Universal React Simple universal React application with server side rendering. Built using latest version of React (v16), React Router (v5+), Redux (v7+), Express (v5+), Webpack (v4+), Babel Preset
Koa React Universal koa2、react、react-universal-component、koa-webpack-server、async/await、code-splitting、hot-module-replacement、react-router4、redux-thunk This project is dedicated to build simple yet po
Universal React Tutorial A tutorial on building universal web applications. The web application is built with: Node.js Express React ReactRouter Redux and ReactRedux Download $ git clone https://githu
React Native Universal Monorepo An opinonated approach to supporting multiple platforms with React Native using a Yarn Workspaces monorepo. Check out Running React Native everywhere for an in-depth gu