Skip to content
This repository was archived by the owner on Apr 11, 2019. It is now read-only.

Commit 86ac75b

Browse files
committed
Feat: add steps to ensure an optimized production build
- Webpack configuration for production - Routes and store configured for production
1 parent 51e4cda commit 86ac75b

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

app/src/routes.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import * as Pages from 'pages';
99

1010
const routes = (
1111
<Provider store={store}>
12-
<Router history={history}>
12+
<Router
13+
history={history} // Scroll to top on route transitions
14+
onUpdate={() => window.scrollTo(0, 0)} // eslint-disable-line
15+
>
1316
<Route path="/" component={App}>
1417
<IndexRoute component={Pages.LandingPage} />
1518
<Route path="*" component={Pages.NotFoundPage} />

app/src/store.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { browserHistory } from 'react-router';
55
import createLogger from 'redux-logger';
66
import promiseMiddleware from 'redux-promise-middleware';
77
import rootReducer from './reducers';
8+
const isClient = typeof document !== 'undefined';
9+
const isDeveloping = process.env.NODE_ENV !== 'production';
810

911
const initialState = {
1012
featureComponent: {
@@ -17,15 +19,21 @@ const initialState = {
1719
/* Commonly used middlewares and enhancers */
1820
/* See: http://redux.js.org/docs/advanced/Middleware.html*/
1921
const loggerMiddleware = createLogger();
20-
const middlewares = [thunk, promiseMiddleware(), loggerMiddleware];
22+
const middlewares = [thunk, promiseMiddleware()];
23+
24+
if (isDeveloping) {
25+
middlewares.push(loggerMiddleware);
26+
}
2127

2228
/* Everyone should use redux dev tools */
2329
/* https://github.com/gaearon/redux-devtools */
2430
/* https://medium.com/@meagle/understanding-87566abcfb7a */
2531
const enhancers = [];
2632
const devToolsExtension = window.devToolsExtension;
27-
if (typeof devToolsExtension === 'function') {
28-
enhancers.push(devToolsExtension());
33+
if (isClient && isDeveloping) {
34+
if (typeof devToolsExtension === 'function') {
35+
enhancers.push(devToolsExtension());
36+
}
2937
}
3038

3139
const composedEnhancers = compose(

webpack.config.babel.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,11 @@ module.exports = {
7575
pages: path.resolve(ROOT_PATH, 'app/src/pages')
7676
},
7777
},
78-
output: {
79-
path: process.env.NODE_ENV === 'production' ? path.resolve(ROOT_PATH, 'server/public') : path.resolve(ROOT_PATH, 'app/build'),
78+
output: { // Set output to public folder in production
79+
path: process.env.NODE_ENV === 'production' ?
80+
path.resolve(ROOT_PATH, 'server/public')
81+
:
82+
path.resolve(ROOT_PATH, 'app/build'),
8083
publicPath: '/',
8184
filename: 'bundle.js',
8285
},
@@ -91,7 +94,21 @@ module.exports = {
9194
host: HOST,
9295
port: PORT
9396
},
94-
plugins: [
97+
plugins: process.env.NODE_ENV === 'production' ?
98+
[
99+
new webpack.DefinePlugin({
100+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
101+
}),
102+
new webpack.optimize.OccurrenceOrderPlugin(true),
103+
new webpack.optimize.DedupePlugin(),
104+
new webpack.optimize.UglifyJsPlugin({
105+
compress: {
106+
warnings: false,
107+
},
108+
}),
109+
]
110+
:
111+
[
95112
new webpack.HotModuleReplacementPlugin(),
96113
new NpmInstallPlugin(),
97114
new HtmlwebpackPlugin({

0 commit comments

Comments
 (0)