addDevMiddlewares.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const path = require('path')
  2. const webpack = require('webpack')
  3. const webpackDevMiddleware = require('webpack-dev-middleware')
  4. const webpackHotMiddleware = require('webpack-hot-middleware')
  5. const proxy = require('http-proxy-middleware')
  6. const fs = require('fs')
  7. function createWebpackMiddleware(compiler, publicPath) {
  8. return webpackDevMiddleware(compiler, {
  9. logLevel: 'warn',
  10. publicPath,
  11. silent: true,
  12. stats: 'errors-only'
  13. })
  14. }
  15. module.exports = function addDevMiddlewares(app, webpackConfig) {
  16. const compiler = webpack(webpackConfig)
  17. const middleware = createWebpackMiddleware(
  18. compiler,
  19. webpackConfig.output.publicPath
  20. )
  21. let proxyTarget = 'http://localhost:8080/'
  22. const configFilePath = path.resolve(__dirname, '../config.json')
  23. if (fs.existsSync(configFilePath)) {
  24. const jsonConfig = fs.readFileSync(configFilePath)
  25. const { proxies } = JSON.parse(jsonConfig)
  26. proxyTarget = proxies.find((proxy) => proxy.enabled).target
  27. }
  28. app.use(
  29. ['/api/v3', '/image'],
  30. proxy({ target: proxyTarget, changeOrigin: true })
  31. )
  32. app.use(middleware)
  33. app.use(webpackHotMiddleware(compiler))
  34. // Since webpackDevMiddleware uses memory-fs internally to store build
  35. // artifacts, we use it instead
  36. const fsMemory = middleware.fileSystem
  37. app.get('*', (req, res) => {
  38. fsMemory.readFile(
  39. path.join(compiler.outputPath, 'index.html'),
  40. (err, file) => {
  41. if (err) {
  42. res.sendStatus(404)
  43. } else {
  44. res.send(file.toString())
  45. }
  46. }
  47. )
  48. })
  49. }