const path = require('path'); const webpack = require('webpack'); const webpackDevMiddleware = require('webpack-dev-middleware'); const webpackHotMiddleware = require('webpack-hot-middleware'); const { createProxyMiddleware } = require('http-proxy-middleware'); const logger = require('../logger'); 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)); // Since webpackDevMiddleware uses memory-fs internally to store build // artifacts, we use it instead const fs = middleware.fileSystem; let proxyHost = process.env.PROXY; const proxyPrefix = process.env.PROXY_PREFIX || '/Cityinterface'; app.get('/setproxy', (req, res) => { if (req.query && req.query.host) { proxyHost = req.query.host; res.send(200); } else { res.send(400); } }); if ( proxyHost && (proxyHost.toLowerCase() !== 'origin' || proxyHost.toLowerCase() !== 'off' || proxyHost !== '0') ) { logger.info(`using proxy at: ${proxyHost}`); logger.info(`proxy prefix: ${proxyPrefix}`); app.use( proxyPrefix, createProxyMiddleware({ target: proxyHost, changeOrigin: true, // eslint-disable-next-line no-unused-vars onProxyReq: (_prexyReq, _req, _res) => { logger.info('onProxyReq'); }, // eslint-disable-next-line no-unused-vars onProxyRes(_proxyRes, _req, _res) { logger.info('onProxyRes'); }, }), ); } app.get('*', (_req, res) => { fs.readFile(path.join(compiler.outputPath, 'index.html'), (err, file) => { if (err) { res.sendStatus(404); } else { res.send(file.toString()); } }); }); };