Passing in hot: false does not disable HMR
heisian opened this issue · 4 comments
- Node Version: v8.2.1
- NPM Version: yarn v1.3.2
- koa Version: v2.0.0-alpha.7
- koa-wepback Version: ^2.0.3
If you have a large amount of code to share which demonstrates the problem you're experiencing, please provide a link to your
repository rather than pasting code. Otherwise, please paste relevant short snippets below.
// webpack.config.js
...
devServer: {
hot: false,
},
...
// ./server/middleware/hotClient.js
const server = new Koa()
server.use(
middleware({
compiler,
config: webpackConfig,
dev: {
logger: log,
stats: 'minimal',
publicPath,
contentBase,
},
hot: {
hot: false,
// logLevel: 'silent',
},
})
)
server.listen(3000)
Expected Behavior
No websocket server should start.
Actual Behavior
Websocket server starts, and the client page tries to connect.
NFO Running [main]...
CLI Loading [development][main] environmental variables...
NFO Loaded environment variables are available in debug mode.
NFO Run yarn:run -i <webApp> to enable.
CLI Registering API with LocoProxy...
CLI Connected to DevOpz tunneler.
CLI Found host: MAIN_API_ROOT=https://xxx
CLI Registering CLIENT with LocoProxy...
CLI [nodemon] 1.14.11
CLI [nodemon] reading config ./nodemon.json
CLI [nodemon] to restart at any time, enter `rs`
CLI [nodemon] watching extensions: js,mjs,json
CLI [nodemon] starting `node -r babel-register -r babel-polyfill ./main/server/index.js`
CLI [nodemon] spawning
CLI [nodemon] child pid: 21760
CLI [nodemon] watching 396 files
CLI Connected to DevOpz tunneler.
CLI Found host: MAIN_API_ROOT=https://xxx
CLI Found host: MAIN_CLIENT_ROOT=https://xxx
CLI Found host: CLIENT_ROOT=https://xxx
CLI Starting webpack build...
ℹ 「hot」: webpack: Compiling...
✖ 「hot」: WebSocket Server Error { Error: listen EADDRINUSE 127.0.0.1:8081
at Object.exports._errnoException (util.js:1024:11)
at exports._exceptionWithHostPort (util.js:1047:20)
at Server.setupListenHandle [as _listen2] (net.js:1319:14)
at listenInCluster (net.js:1367:12)
at GetAddrInfoReqWrap.doListen (net.js:1493:7)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:97:10)
code: 'EADDRINUSE',
errno: 'EADDRINUSE',
syscall: 'listen',
address: '127.0.0.1',
port: 8081 }
CLI Creating [main] server instance...
CLI Connected to MongoDB at mongodb://127.0.0.1/ethos
CLI [main] is ready and serving from port [8000].
The EADDRINUSE
is irrelevant, of course, the server must still be running from a previously-killed process. However I would expect the server not to try to start at all.
How can we reproduce the behavior?
Thanks for the issue but this isn't a problem with koa-webpack
. Rather, this is an issue with webpack-hot-client
.
You should also resolve this error:
「hot」: WebSocket Server Error { Error: listen EADDRINUSE 127.0.0.1:8081
It's very relevant, actually. If you have another socket server running off of different/other settings, it's going to mess up the instance you're trying to run. I'd recommend passing a different port to the hot
settings, or making sure you're closing the koa-webpack
middleware instance. The assumption that a separate instance of koa-webpack, and subsequently webpack-hot-client, wouldn't try to start a new socket server is a poor one - that's a core function of the module, and essential when running multiple instances.
Looking at webpack-hot-client
, we can see that the module does actually disable HMR: https://github.com/webpack-contrib/webpack-hot-client/blob/master/lib/client/index.js#L31 in the traditional sense, and instead reloads the page should an update be detected. That's the behavior that the hot
option dictates. If you wanted to disable full page reload, you'd have to use the reload: false
option, which currently appears to be ignored. However, if you don't want any refresh when an HMR patch is detected, then you should use webpack-dev-middleware directly, as 50% of koa-webpack's usefulness is then moot.
Thanks for the reply. What I meant was that it seems the other server listening on 8081 must be an existing webpack-hot-clien websockets server that didnt get closed when I SIGINT’ed my previous run of the script.
At any rate you’re right, I should simply just use webpack-dev-middleware. Thank you for the advice and help.
['dev'] is an invalid additional property? why?
@liubin915249126 it's considered poor form to ask an off-topic question in an issue thread. Please do have a read about Github etiquette. Your question is what is called "thread jacking." Read the README, that's not a valid option.