addDevMiddlewares.js 1.09 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 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

function createWebpackMiddleware(compiler, publicPath) {
  return webpackDevMiddleware(compiler, {
    logLevel: 'warn',
    publicPath,
    silent: true,
    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 28 29
  // Since webpackDevMiddleware uses memory-fs internally to store build
  // artifacts, we use it instead
  const fs = middleware.fileSystem;

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());
      }
    });
  });
};