From 9f15a09d264f510e28bfd05c0c065e93e3ccfce0 Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Fri, 5 Jan 2018 15:07:41 -0800 Subject: [PATCH] feat(wepback): Add app reducer hot reloading --- common/app/create-app.jsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/common/app/create-app.jsx b/common/app/create-app.jsx index b627e3e217..ff87484a2b 100644 --- a/common/app/create-app.jsx +++ b/common/app/create-app.jsx @@ -1,4 +1,5 @@ import { Observable } from 'rx'; +import createDebugger from 'debug'; import { compose, createStore, applyMiddleware } from 'redux'; import { selectLocationState, connectRoutes } from 'redux-first-router'; import { combineReducers } from 'berkeleys-redux-utils'; @@ -14,6 +15,7 @@ import epics from './epics'; import { onBeforeChange } from './utils/redux-first-router.js'; import servicesCreator from '../utils/services-creator'; +const debug = createDebugger('fcc:app:createApp'); // createApp(settings: { // history?: History, // defaultState?: Object|Void, @@ -84,6 +86,21 @@ export default function createApp({ const store = createStore(reducer, defaultState, enhancer); const location = selectLocationState(store.getState()); + // note(berks): should get stripped in production client by webpack + // We need to find a way to hoist to top level in production node env + // babel plugin, maybe? After a quick search I couldn't find one + if (process.env.NODE_ENV === 'development') { + if (module.hot) { + module.hot.accept('./reducer.js', () => { + debug('hot reloading reducers'); + store.replaceReducer(combineReducers( + require('./reducer.js').default, + panesReducer, + routesReducer + )); + }); + } + } // ({ // redirect, // props,