UNPKG

1.7 kBJavaScriptView Raw
1const path = require('path')
2const express = require('express')
3const proxyMiddleware = require('http-proxy-middleware')
4
5module.exports = function (compiler, options = {}) {
6 const server = express()
7
8 const port = options.port
9 const host = options.host
10
11 const devMiddleWare = require('webpack-dev-middleware')(compiler, {
12 quiet: true,
13 publicPath: compiler.options.output.publicPath,
14 path: `http://${host}:${port}/__webpack_hmr`
15 })
16
17 server.use(devMiddleWare)
18 server.use(require('webpack-hot-middleware')(compiler, {
19 log: () => null,
20 heartbeat: 2500
21 }))
22
23 if (options.setupDevServer) {
24 options.setupDevServer(server)
25 }
26
27 const mfs = devMiddleWare.fileSystem
28 const file = path.join(compiler.options.output.path, 'index.html')
29
30 // proxy api requests
31 if (typeof options.proxy === 'string') {
32 server.use(proxyMiddleware('/api', {
33 target: options.proxy,
34 changeOrigin: true,
35 pathRewrite: {
36 '^/api': ''
37 }
38 }))
39 } else if (typeof options.proxy === 'object') {
40 Object.keys(options.proxy).forEach(context => {
41 let proxyOptions = options.proxy[context]
42 if (typeof proxyOptions === 'string') {
43 proxyOptions = {
44 target: proxyOptions,
45 changeOrigin: true,
46 pathRewrite: {
47 [`^${context}`]: ''
48 }
49 }
50 }
51 server.use(proxyMiddleware(context, proxyOptions))
52 })
53 }
54
55 server.use(require('connect-history-api-fallback')({ index: '/' }))
56
57 server.get('/', (req, res) => {
58 devMiddleWare.waitUntilValid(() => {
59 const html = mfs.readFileSync(file)
60 res.end(html)
61 })
62 })
63
64 return { server, devMiddleWare, port, host }
65}