1 | const path = require('path')
|
2 | const express = require('express')
|
3 | const proxyMiddleware = require('http-proxy-middleware')
|
4 |
|
5 | module.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 |
|
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 | }
|