Skip to content

Commit 6b6339e

Browse files
committed
updating to react router 4, adding sagas, updating webpack config setup, add HMR
1 parent 82c2d13 commit 6b6339e

35 files changed

+3269
-1584
lines changed

.babelrc

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"presets": [["es2015", {"loose": true}], "react", "stage-0"],
3+
"plugins": [
4+
// ["module-resolver", {
5+
// "root": ["./src"],
6+
// "alias": {
7+
// "components": "client/components",
8+
// "types": "client/types.js",
9+
// "ui": "client/components/ui",
10+
// "actions": "client/actions",
11+
// "containers": "client/containers",
12+
// "reducers": "client/reducers",
13+
// "utils": "client/utils",
14+
// "constants": "client/constants.js",
15+
// "store": "client/store.js",
16+
// "svg": "client/svg",
17+
// "widgets": "client/components/widgets",
18+
// "schemas": "server/database/schemas",
19+
// "query": "server/queryUtils"
20+
// }
21+
// }],
22+
["react-hot-loader/babel"],
23+
["transform-runtime"]
24+
]
25+
}

.eslintrc

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
{
2+
"parser": "babel-eslint",
3+
"extends": "airbnb",
4+
"plugins": [
5+
"react",
6+
"jsx-a11y"
7+
],
8+
"env": {
9+
"browser": true,
10+
"node": true,
11+
"mocha": true,
12+
"es6": true
13+
},
14+
"parserOptions": {
15+
"ecmaVersion": 6,
16+
"sourceType": "module",
17+
"ecmaFeatures": {
18+
"jsx": true
19+
}
20+
},
21+
"rules": {
22+
"import/no-unresolved": 0,
23+
"import/imports-first": 0,
24+
"react/no-children-prop": 0,
25+
"react/require-default-props": 0,
26+
"react/jsx-filename-extension": 0,
27+
"react/jsx-boolean-value": 0,
28+
"react/no-array-index-key": 0,
29+
"react/no-danger": 0,
30+
"react/no-unused-prop-types": 0,
31+
"react/forbid-prop-types": 0,
32+
"react/sort-comp": 0,
33+
"import/no-extraneous-dependencies": 0,
34+
"import/newline-after-import": 0,
35+
"import/prefer-default-export": 0,
36+
"import/no-dynamic-require": 0,
37+
"no-duplicate-imports": 0,
38+
"no-void": 0,
39+
"no-empty": 0,
40+
"no-constant-condition": 0,
41+
"no-return-assign": 0,
42+
"no-underscore-dangle": 0,
43+
"space-unary-ops": 0,
44+
"import/extensions": 0,
45+
"new-parens": 0,
46+
"no-mixed-operators": 0,
47+
"arrow-parens": 0,
48+
"dot-notation": 0,
49+
"no-param-reassign": 0,
50+
"generator-star-spacing": 0,
51+
"class-methods-use-this": 0,
52+
"jsx-a11y/no-static-element-interactions": 0,
53+
"no-prototype-builtins": 0,
54+
"no-template-curly-in-string": 0,
55+
"no-else-return": 0,
56+
"no-case-declarations": 0,
57+
"comma-dangle": [
58+
2,
59+
"always-multiline"
60+
],
61+
"indent": [
62+
2,
63+
2,
64+
{
65+
"SwitchCase": 1
66+
}
67+
],
68+
"no-console": 1,
69+
"max-len": 0,
70+
"prefer-template": 2,
71+
"no-use-before-define": 0,
72+
"newline-per-chained-call": 0,
73+
"import/no-webpack-loader-syntax": 0,
74+
"no-useless-escape": 0,
75+
"import/first": 0,
76+
"func-names": 0,
77+
"no-restricted-syntax": 0,
78+
"arrow-body-style": [
79+
2,
80+
"as-needed"
81+
],
82+
"jsx-a11y/href-no-hash": 2,
83+
"jsx-a11y/label-has-for": 2,
84+
"jsx-a11y/mouse-events-have-key-events": 2,
85+
"jsx-a11y/role-has-required-aria-props": 2,
86+
"jsx-a11y/role-supports-aria-props": 2,
87+
"jsx-a11y/aria-props": 2
88+
}
89+
}

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Isomorphic Redux, React, and Webpack Starter
1+
# Redux Server Rendering Starter
22

33
```bash
44
yarn install
@@ -8,4 +8,4 @@ yarn install
88
npm start
99
```
1010

11-
![now we here](http://i.giphy.com/l3V0pGcu4HosNs57a.gif)
11+
![now we here](http://i.giphy.com/l3V0pGcu4HosNs57a.gif)

index.html

-13
This file was deleted.

package.json

+58-29
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,77 @@
11
{
2-
"name": "cc-runner",
3-
"version": "1.0.0",
4-
"description": "Coding Careers Code Runner",
2+
"name": "redux-server-rendering-starter",
3+
"version": "2.0.0",
4+
"description": "React, redux, node, webpack server rendering starter",
55
"main": "build/server.js",
66
"scripts": {
77
"test": "echo \"Error: no test specified\" && exit 1",
8-
"start": "node ./run-dev.js"
8+
"start": "npm run dev:start",
9+
"dev:start": "NODE_ENV=development DEV_SERVER_PORT=3001 run-p dev:client:build dev:server:build dev:server:delay",
10+
"dev:server:delay": "run-s delay dev:server:start",
11+
"delay": "node ./node_modules/npm-delay 10000",
12+
"dev:server:build": "webpack --config ./webpack/server.js --watch --colors --display-error-details",
13+
"dev:server:start": "nodemon ./build/server.js --watch ./build",
14+
"dev:client:build": "node webpack/dev-server.js"
915
},
1016
"repository": {
11-
"url": "git+https://github.com/realseanp/cc-runner.git",
17+
"url": "git+https://github.com/realseanp/isomorphic-redux-react-webpack-starter",
1218
"type": "git"
1319
},
14-
"author": "sean <sean@madeinhaus.com>",
20+
"author": "realseanp",
1521
"license": "ISC",
1622
"bugs": {
17-
"url": "https://github.com/realseanp/cc-runner/issues"
23+
"url": "https://github.com/realseanp/isomorphic-redux-react-webpack-starter/issues"
1824
},
19-
"homepage": "https://github.com/realseanp/cc-runner#readme",
25+
"homepage": "https://github.com/realseanp/isomorphic-redux-react-webpack-starter#readme",
2026
"dependencies": {
21-
"babel-core": "^6.18.2",
22-
"babel-loader": "^6.2.7",
23-
"babel-plugin-module-resolver": "^2.3.0",
24-
"babel-preset-es2015": "^6.18.0",
25-
"babel-preset-react": "^6.16.0",
26-
"babel-preset-stage-2": "^6.18.0",
27+
"eslint": "^3.18.0",
28+
"eslint-config-airbnb": "^14.1.0",
29+
"eslint-plugin-import": "^2.2.0",
30+
"eslint-plugin-jsx-a11y": "^4.0.0",
31+
"eslint-plugin-react": "^6.10.3",
32+
"express": "^4.15.2",
33+
"moment": "^2.18.1",
34+
"react": "^15.4.2",
35+
"react-dom": "^15.4.2",
36+
"react-redux": "^5.0.3",
37+
"react-router": "^4.0.0",
38+
"react-router-dom": "^4.0.0",
39+
"react-router-redux": "next",
40+
"redux": "^3.6.0",
41+
"redux-logger": "^3.0.0",
42+
"redux-saga": "^0.14.3",
43+
"tmp": "^0.0.31",
44+
"universal-webpack": "^0.3.7"
45+
},
46+
"devDependencies": {
47+
"babel-core": "^6.24.0",
48+
"babel-eslint": "^7.2.1",
49+
"babel-loader": "^6.4.1",
50+
"babel-plugin-module-resolver": "^2.5.0",
51+
"babel-plugin-transform-runtime": "^6.23.0",
52+
"babel-preset-env": "^1.2.2",
53+
"babel-preset-es2015": "^6.24.0",
54+
"babel-preset-react": "^6.23.0",
55+
"babel-preset-stage-0": "^6.22.0",
56+
"babel-register": "^6.24.0",
2757
"chai": "^3.5.0",
2858
"copy-webpack-plugin": "^4.0.1",
29-
"css-loader": "^0.26.0",
30-
"express": "^4.14.0",
59+
"css-loader": "^0.27.3",
60+
"extract-text-webpack-plugin": "^2.1.0",
3161
"json-loader": "^0.5.4",
32-
"mocha": "^3.1.2",
33-
"moment": "^2.16.0",
34-
"node-sass": "^3.13.0",
62+
"mocha": "^3.2.0",
63+
"node-sass": "^4.5.1",
3564
"nodemon": "^1.11.0",
36-
"react": "^15.4.1",
37-
"react-dom": "^15.4.1",
38-
"react-redux": "^5.0.1",
39-
"react-router": "^3.0.0",
40-
"redux": "^3.6.0",
41-
"sass-loader": "^4.0.2",
42-
"source-map-support": "^0.4.6",
43-
"style-loader": "^0.13.1",
44-
"tmp": "^0.0.30",
45-
"webpack": "^1.13.3",
65+
"npm-delay": "^1.0.4",
66+
"npm-run-all": "^4.0.2",
67+
"react-hot-loader": "next",
68+
"sass-loader": "^6.0.3",
69+
"source-map-support": "^0.4.14",
70+
"style-loader": "^0.16.0",
71+
"webpack": "^2.3.2",
72+
"webpack-dev-middleware": "^1.10.1",
73+
"webpack-dev-server": "^2.4.2",
74+
"webpack-hot-middleware": "^2.17.1",
4675
"webpack-node-externals": "^1.5.4"
4776
}
4877
}

public/webpack-chunks.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"javascript":{"client":"/client.js"},"styles":{}}

run-dev.js

-66
This file was deleted.

src/client/client.js

+44-12
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,48 @@
1-
import { match, Router, browserHistory as history } from 'react-router';
2-
import routes from './components/Routes';
3-
import { render } from 'react-dom';
1+
import ReactDOM from 'react-dom';
42
import React from 'react';
53
import { Provider } from 'react-redux';
6-
import makeStore from './store';
4+
import { createLogger } from 'redux-logger';
5+
import createSagaMiddleware from 'redux-saga';
6+
import makeStore from 'Store';
7+
import sagas from 'Sagas';
8+
import { ConnectedRouter, routerMiddleware } from 'react-router-redux';
9+
import createHistory from 'history/createBrowserHistory';
10+
import App from 'Components/App';
11+
import { AppContainer } from 'react-hot-loader';
712

8-
const store = makeStore(window.__INITIAL_STATE__);
13+
const logger = createLogger();
14+
const sagaMiddleware = createSagaMiddleware();
15+
const history = createHistory();
16+
17+
const routeMiddleware = routerMiddleware(history);
18+
19+
const store = makeStore(
20+
window.__INITIAL_STATE__,
21+
logger,
22+
sagaMiddleware,
23+
routeMiddleware,
24+
);
25+
26+
sagaMiddleware.run(sagas);
27+
28+
const render = Component => {
29+
ReactDOM.render(
30+
<AppContainer>
31+
<Provider store={store}>
32+
<ConnectedRouter history={history}>
33+
<Component />
34+
</ConnectedRouter>
35+
</Provider>
36+
</AppContainer>,
37+
document.getElementById('app')
38+
);
39+
};
40+
41+
render(App);
42+
43+
if (module.hot && process.env.NODE_ENV === 'development') {
44+
module.hot.accept('./components/App', () => {
45+
render(App);
46+
});
47+
}
948

10-
match({ history, routes }, (error, redirectLocation, renderProps) => {
11-
render(
12-
<Provider store={store}>
13-
<Router {...renderProps} />
14-
</Provider>,
15-
document.getElementById('app'));
16-
});

0 commit comments

Comments
 (0)