From 9e7f6b6eb1b85de082065948e165a36f75063734 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Sat, 27 Jan 2018 17:39:55 -0500 Subject: [PATCH] refactor: handle HMR --- dev/webpack/webpack.common.js | 2 +- package.json | 1 + server/master.js | 31 +++++++++++++++++++++++++ wiki.js | 42 +++++++++++++++------------------- yarn.lock | Bin 394965 -> 396289 bytes 5 files changed, 51 insertions(+), 25 deletions(-) diff --git a/dev/webpack/webpack.common.js b/dev/webpack/webpack.common.js index 63cd400d..d032c376 100644 --- a/dev/webpack/webpack.common.js +++ b/dev/webpack/webpack.common.js @@ -83,7 +83,7 @@ module.exports = { test: /\.vue$/, loader: 'vue-loader', options: { - extractCSS: true, + extractCSS: ExtractTextPlugin, postcss: postCSSConfig, loaders: { css: [ diff --git a/package.json b/package.json index a42be823..353a9302 100644 --- a/package.json +++ b/package.json @@ -203,6 +203,7 @@ "vuex-persistedstate": "2.4.2", "webpack": "3.10.0", "webpack-bundle-analyzer": "2.9.2", + "webpack-dev-middleware": "2.0.4", "webpack-hot-middleware": "2.21.0", "webpack-merge": "4.1.1", "whatwg-fetch": "2.0.3" diff --git a/server/master.js b/server/master.js index 40986d26..1050a69d 100644 --- a/server/master.js +++ b/server/master.js @@ -106,6 +106,20 @@ module.exports = async () => { app.locals.moment.locale(wiki.config.site.lang) app.locals.config = wiki.config + // ---------------------------------------- + // HMR (Dev Mode Only) + // ---------------------------------------- + + if (global.DEV) { + const webpackDevMiddleware = require('webpack-dev-middleware') + const webpackHotMiddleware = require('webpack-hot-middleware') + app.use(webpackDevMiddleware(global.WP, { + publicPath: global.WPCONFIG.output.publicPath, + logger: wiki.logger + })) + app.use(webpackHotMiddleware(global.WP)) + } + // ---------------------------------------- // Controllers // ---------------------------------------- @@ -149,6 +163,8 @@ module.exports = async () => { // Start HTTP server // ---------------------------------------- + let srvConnections = {} + wiki.logger.info(`HTTP Server on port: [ ${wiki.config.port} ]`) app.set('port', wiki.config.port) @@ -173,9 +189,24 @@ module.exports = async () => { } }) + wiki.server.on('connection', conn => { + let key = `${conn.remoteAddress}:${conn.remotePort}` + srvConnections[key] = conn + conn.on('close', function() { + delete srvConnections[key] + }) + }) + wiki.server.on('listening', () => { wiki.logger.info('HTTP Server: [ RUNNING ]') }) + wiki.server.destroy = (cb) => { + wiki.server.close(cb) + for (let key in srvConnections) { + srvConnections[key].destroy() + } + } + return true } diff --git a/wiki.js b/wiki.js index d3b4dff3..adee226f 100644 --- a/wiki.js +++ b/wiki.js @@ -68,37 +68,31 @@ const init = { }, dev() { if (cluster.isMaster) { - const webpackConfig = require('./dev/webpack/webpack.dev.js') const webpack = require('webpack') const chokidar = require('chokidar') - let isWebpackInit = false - + global.WPCONFIG = require('./dev/webpack/webpack.dev.js') global.DEV = true - global.WP = webpack(webpackConfig, (err, stats) => { - if (!isWebpackInit) { - isWebpackInit = true - require('./server') + global.WP = webpack(global.WPCONFIG) + require('./server') - const devWatcher = chokidar.watch('./server') - devWatcher.on('ready', () => { - devWatcher.on('all', () => { - console.warn('--- >>>>>>>>>>>>>>>>>>>>>>>>>>>> ---') - console.warn('--- Changes detected: Restarting ---') - console.warn('--- <<<<<<<<<<<<<<<<<<<<<<<<<<<< ---') - global.wiki.server.close(() => { - global.wiki = {} - for (const workerId in cluster.workers) { - cluster.workers[workerId].kill() - } - Object.keys(require.cache).forEach(function(id) { - if (/[/\\]server[/\\]/.test(id)) delete require.cache[id] - }) - require('./server') - }) + const devWatcher = chokidar.watch('./server') + devWatcher.on('ready', () => { + devWatcher.on('all', () => { + console.warn('--- >>>>>>>>>>>>>>>>>>>>>>>>>>>> ---') + console.warn('--- Changes detected: Restarting ---') + console.warn('--- <<<<<<<<<<<<<<<<<<<<<<<<<<<< ---') + global.wiki.server.destroy(() => { + global.wiki = {} + for (const workerId in cluster.workers) { + cluster.workers[workerId].kill() + } + Object.keys(require.cache).forEach(function(id) { + if (/[/\\]server[/\\]/.test(id)) delete require.cache[id] }) + require('./server') }) - } + }) }) } else { require('./server') diff --git a/yarn.lock b/yarn.lock index 207a7d1d37365817ae0c8f91cc6c21326e66a695..8efce0b273e8db059079dbc3def055cdff6e923d 100644 GIT binary patch delta 849 zcmY*YO-~a+7|wRKd^8Xfh^3Hd3TQO3yPePdNIVcV9yB2yJz-{cX0g~(11(ffs2C5% zDE2VMc%bp>0i#JzM)(7G@&E^nUOZ^PpWw8$vCLd%-e)q;$Gr3PS?0m3%-XuOp7;oU zR|n^v<$EPjE-q_p+D_{)k8M}is$c?P7rW4{%-^48K7|TJOnNbtvE-D?kYFMhAs9hl z#h#!Mh5G${oVQeuwNsm5=;D8C$U}-z6ncy?B#k8+#vCC;Nr)8TL^38qV|6N(DiunF$cgpj zE*PudxaR8J2IzYdHb66M*e_2H%(d0$vijDx{Z?;(wj0gFjy>|rUMLq9^|v#LjLtl? za#yQMMWz6?T2xCcXI-WDSv zeDe;NQ{)j(VH^_bMM7__S>yW01{kqCec>RP9W0boc4`j0NN-W=oL)#Lhl5TcQ>m;O zU90Uw(8ZlnACS(kLl-!U?4DpUD(mmy6N9n=s4*Cx@}zP Qs?^)H#L4F7ev;+>0*-eFz5oCK delta 81 zcmV-X0IvUmm>AWK7=VNUgaWh!>~*(JcLNRrmn+Z%510R30WP<&c>}X3hwP#Qx9p+> n;U1TR!UUF=*TDp#w;96(66?3Xt_5K&x0~GsGXb~M-vuo!jQ=Bt