From 19d9b92387fa08f0d2770b292c47ec2e7f7b49a2 Mon Sep 17 00:00:00 2001 From: "Kent C. Dodds" Date: Tue, 19 Jul 2016 21:42:01 -0600 Subject: [PATCH] add HMR --- package.json | 2 +- src/bootstrap.js | 26 ++++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index bc305ba..2d31b3f 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "prebuild:dev": "rimraf dist", "build:dev": "webpack --env.dev", "start": "http-server", - "dev": "webpack-dev-server --env.dev", + "dev": "webpack-dev-server --env.dev --hot", "debug": "node-nightly --inspect --debug-brk node_modules/.bin/webpack --env.debug", "debug:dev": "npm run debug -- --env.dev", "debug:prod": "npm run debug -- --env.prod", diff --git a/src/bootstrap.js b/src/bootstrap.js index d223db6..4572f23 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -1,5 +1,27 @@ +/* eslint no-console:0 */ var app = require('./app') var helpers = require('./helpers') -helpers.$on(window, 'load', app.onLoad) -helpers.$on(window, 'hashchange', app.onLoad) +// this is only relevant when using `hot` mode with webpack +// special thanks to Eric Clemmons: https://github.com/ericclemmons/webpack-hot-server-example +const reloading = document.readyState === 'complete' +if (module.hot) { + module.hot.accept(function(err) { + console.log('❌ HMR Error:', err) + }) + if (reloading) { + console.log('🔁 HMR Reloading.') + app.onLoad() + } else { + console.info('✅ HMR Enabled.') + bootstrap() + } +} else { + console.info('❌ HMR Not Supported.') + bootstrap() +} + +function bootstrap() { + helpers.$on(window, 'load', app.onLoad) + helpers.$on(window, 'hashchange', app.onLoad) +}