How to use socket.io together with webpack-hot-middleware?

后端 未结 1 1414
暖寄归人
暖寄归人 2021-02-05 07:02

I have a Koa server using webpack-dev-middleware and webpack-hot-middleware doing hot module replacement (HMR), so the middleware uses a websocket to push changes to the client.

相关标签:
1条回答
  • 2021-02-05 07:27

    Here's what worked for me in an app I'm working on where I'm using webpack hot reloading + socket.io on the same express server.

    Additions to your package.json:

    "webpack-dev-middleware": "^1.4.0",
    "webpack-hot-middleware": "^2.6.0"
    

    In the plugins section of your webpack config:

    plugins: [
       new webpack.optimize.OccurenceOrderPlugin(),
       new webpack.HotModuleReplacementPlugin(),
       new webpack.NoErrorsPlugin(),
    ],
    

    Setup for the express app:

    const http = require('http');
    const express = require('express');
    
    const webpack = require('webpack');
    const webpackConfig = require('./webpack.config');
    const compiler = webpack(webpackConfig);
    
    // Create the app, setup the webpack middleware
    const app = express();
    app.use(require('webpack-dev-middleware')(compiler, {
      noInfo: true,
      publicPath: webpackConfig.output.publicPath,
    }));
    app.use(require('webpack-hot-middleware')(compiler));
    
    // You probably have other paths here
    app.use(express.static('dist'));
    
    const server = new http.Server(app);
    const io = require('socket.io')(server);
    
    const PORT = process.env.PORT || 8090;
    
    server.listen(PORT);
    
    io.on('connection', (socket) => {
      // <insert relevant code here>
      socket.emit('mappy:playerbatch', playerbatch);
    });
    

    I posted a bounty for this question to help this question get answered, though I've got it working for my own app.

    0 讨论(0)
提交回复
热议问题