refactor: handle HMR
This commit is contained in:
@@ -83,7 +83,7 @@ module.exports = {
|
|||||||
test: /\.vue$/,
|
test: /\.vue$/,
|
||||||
loader: 'vue-loader',
|
loader: 'vue-loader',
|
||||||
options: {
|
options: {
|
||||||
extractCSS: true,
|
extractCSS: ExtractTextPlugin,
|
||||||
postcss: postCSSConfig,
|
postcss: postCSSConfig,
|
||||||
loaders: {
|
loaders: {
|
||||||
css: [
|
css: [
|
||||||
|
|||||||
@@ -203,6 +203,7 @@
|
|||||||
"vuex-persistedstate": "2.4.2",
|
"vuex-persistedstate": "2.4.2",
|
||||||
"webpack": "3.10.0",
|
"webpack": "3.10.0",
|
||||||
"webpack-bundle-analyzer": "2.9.2",
|
"webpack-bundle-analyzer": "2.9.2",
|
||||||
|
"webpack-dev-middleware": "2.0.4",
|
||||||
"webpack-hot-middleware": "2.21.0",
|
"webpack-hot-middleware": "2.21.0",
|
||||||
"webpack-merge": "4.1.1",
|
"webpack-merge": "4.1.1",
|
||||||
"whatwg-fetch": "2.0.3"
|
"whatwg-fetch": "2.0.3"
|
||||||
|
|||||||
@@ -106,6 +106,20 @@ module.exports = async () => {
|
|||||||
app.locals.moment.locale(wiki.config.site.lang)
|
app.locals.moment.locale(wiki.config.site.lang)
|
||||||
app.locals.config = wiki.config
|
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
|
// Controllers
|
||||||
// ----------------------------------------
|
// ----------------------------------------
|
||||||
@@ -149,6 +163,8 @@ module.exports = async () => {
|
|||||||
// Start HTTP server
|
// Start HTTP server
|
||||||
// ----------------------------------------
|
// ----------------------------------------
|
||||||
|
|
||||||
|
let srvConnections = {}
|
||||||
|
|
||||||
wiki.logger.info(`HTTP Server on port: [ ${wiki.config.port} ]`)
|
wiki.logger.info(`HTTP Server on port: [ ${wiki.config.port} ]`)
|
||||||
|
|
||||||
app.set('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.server.on('listening', () => {
|
||||||
wiki.logger.info('HTTP Server: [ RUNNING ]')
|
wiki.logger.info('HTTP Server: [ RUNNING ]')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
wiki.server.destroy = (cb) => {
|
||||||
|
wiki.server.close(cb)
|
||||||
|
for (let key in srvConnections) {
|
||||||
|
srvConnections[key].destroy()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,37 +68,31 @@ const init = {
|
|||||||
},
|
},
|
||||||
dev() {
|
dev() {
|
||||||
if (cluster.isMaster) {
|
if (cluster.isMaster) {
|
||||||
const webpackConfig = require('./dev/webpack/webpack.dev.js')
|
|
||||||
const webpack = require('webpack')
|
const webpack = require('webpack')
|
||||||
const chokidar = require('chokidar')
|
const chokidar = require('chokidar')
|
||||||
|
|
||||||
let isWebpackInit = false
|
global.WPCONFIG = require('./dev/webpack/webpack.dev.js')
|
||||||
|
|
||||||
global.DEV = true
|
global.DEV = true
|
||||||
global.WP = webpack(webpackConfig, (err, stats) => {
|
global.WP = webpack(global.WPCONFIG)
|
||||||
if (!isWebpackInit) {
|
require('./server')
|
||||||
isWebpackInit = true
|
|
||||||
require('./server')
|
|
||||||
|
|
||||||
const devWatcher = chokidar.watch('./server')
|
const devWatcher = chokidar.watch('./server')
|
||||||
devWatcher.on('ready', () => {
|
devWatcher.on('ready', () => {
|
||||||
devWatcher.on('all', () => {
|
devWatcher.on('all', () => {
|
||||||
console.warn('--- >>>>>>>>>>>>>>>>>>>>>>>>>>>> ---')
|
console.warn('--- >>>>>>>>>>>>>>>>>>>>>>>>>>>> ---')
|
||||||
console.warn('--- Changes detected: Restarting ---')
|
console.warn('--- Changes detected: Restarting ---')
|
||||||
console.warn('--- <<<<<<<<<<<<<<<<<<<<<<<<<<<< ---')
|
console.warn('--- <<<<<<<<<<<<<<<<<<<<<<<<<<<< ---')
|
||||||
global.wiki.server.close(() => {
|
global.wiki.server.destroy(() => {
|
||||||
global.wiki = {}
|
global.wiki = {}
|
||||||
for (const workerId in cluster.workers) {
|
for (const workerId in cluster.workers) {
|
||||||
cluster.workers[workerId].kill()
|
cluster.workers[workerId].kill()
|
||||||
}
|
}
|
||||||
Object.keys(require.cache).forEach(function(id) {
|
Object.keys(require.cache).forEach(function(id) {
|
||||||
if (/[/\\]server[/\\]/.test(id)) delete require.cache[id]
|
if (/[/\\]server[/\\]/.test(id)) delete require.cache[id]
|
||||||
})
|
|
||||||
require('./server')
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
require('./server')
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
require('./server')
|
require('./server')
|
||||||
|
|||||||
Reference in New Issue
Block a user