addDevMiddlewares.js 1.11 KB
Newer Older
Julien Benchetrit's avatar
Julien Benchetrit committed
1 2 3 4
const path = require('path');
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
5
const { addProxyMiddleware } = require('../proxy');
Julien Benchetrit's avatar
Julien Benchetrit committed
6 7 8

function createWebpackMiddleware(compiler, publicPath) {
  return webpackDevMiddleware(compiler, {
邓晓峰's avatar
邓晓峰 committed
9
    // logLevel: 'warn',
Julien Benchetrit's avatar
Julien Benchetrit committed
10
    publicPath,
邓晓峰's avatar
邓晓峰 committed
11
    // silent: true,
Julien Benchetrit's avatar
Julien Benchetrit committed
12 13 14 15 16 17 18 19 20 21 22 23 24
    stats: 'errors-only',
  });
}

module.exports = function addDevMiddlewares(app, webpackConfig) {
  const compiler = webpack(webpackConfig);
  const middleware = createWebpackMiddleware(
    compiler,
    webpackConfig.output.publicPath,
  );

  app.use(middleware);
  app.use(webpackHotMiddleware(compiler));
25
  addProxyMiddleware(app);
Julien Benchetrit's avatar
Julien Benchetrit committed
26 27
  // Since webpackDevMiddleware uses memory-fs internally to store build
  // artifacts, we use it instead
邓晓峰's avatar
邓晓峰 committed
28
  const fs = middleware.context.outputFileSystem;
Julien Benchetrit's avatar
Julien Benchetrit committed
29

30
  app.get('*', (_req, res) => {
Julien Benchetrit's avatar
Julien Benchetrit committed
31 32 33 34 35 36 37 38 39
    fs.readFile(path.join(compiler.outputPath, 'index.html'), (err, file) => {
      if (err) {
        res.sendStatus(404);
      } else {
        res.send(file.toString());
      }
    });
  });
};