|
1 | | -var path = require('path') |
2 | | -var express = require('express') |
3 | | -var webpack = require('webpack') |
4 | | -var config = require('../config') |
5 | | -var proxyMiddleware = require('http-proxy-middleware') |
6 | | -var webpackConfig = process.env.NODE_ENV === 'testing' |
7 | | - ? require('./webpack.prod.conf') |
8 | | - : require('./webpack.dev.conf') |
9 | | - |
10 | | -// default port where dev server listens for incoming traffic |
11 | | -var port = process.env.PORT || config.dev.port |
12 | | -// Define HTTP proxies to your custom API backend |
13 | | -// https://github.com/chimurai/http-proxy-middleware |
14 | | -var proxyTable = config.dev.proxyTable |
15 | | - |
16 | | -var app = express() |
17 | | -var compiler = webpack(webpackConfig) |
18 | | - |
19 | | -var devMiddleware = require('webpack-dev-middleware')(compiler, { |
20 | | - publicPath: webpackConfig.output.publicPath, |
21 | | - stats: { |
22 | | - colors: true, |
23 | | - chunks: false |
24 | | - } |
25 | | -}) |
26 | | - |
27 | | -var hotMiddleware = require('webpack-hot-middleware')(compiler) |
28 | | -// force page reload when html-webpack-plugin template changes |
29 | | -compiler.plugin('compilation', function (compilation) { |
30 | | - compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { |
31 | | - hotMiddleware.publish({ action: 'reload' }) |
32 | | - cb() |
33 | | - }) |
34 | | -}) |
35 | | - |
36 | | -// proxy api requests |
37 | | -Object.keys(proxyTable).forEach(function (context) { |
38 | | - var options = proxyTable[context] |
39 | | - if (typeof options === 'string') { |
40 | | - options = { target: options } |
| 1 | +const path = require('path') |
| 2 | +const webpack = require('webpack') |
| 3 | +const WebpackDevServer = require('webpack-dev-server') |
| 4 | +const webpackConfig = require('./webpack.dev.conf') |
| 5 | + |
| 6 | +const compiler = webpack(webpackConfig) |
| 7 | +const port = process.env.PORT || 8080 |
| 8 | + |
| 9 | +const devServerOptions = { |
| 10 | + ...webpackConfig.devServer, |
| 11 | + open: true, |
| 12 | + historyApiFallback: true, |
| 13 | + client: { |
| 14 | + overlay: { |
| 15 | + errors: true, |
| 16 | + warnings: false |
| 17 | + }, |
| 18 | + progress: true |
| 19 | + }, |
| 20 | + static: { |
| 21 | + directory: path.join(__dirname, '../static') |
41 | 22 | } |
42 | | - app.use(proxyMiddleware(context, options)) |
43 | | -}) |
44 | | - |
45 | | -// handle fallback for HTML5 history API |
46 | | -app.use(require('connect-history-api-fallback')()) |
| 23 | +} |
47 | 24 |
|
48 | | -// serve webpack bundle output |
49 | | -app.use(devMiddleware) |
| 25 | +const server = new WebpackDevServer(devServerOptions, compiler) |
50 | 26 |
|
51 | | -// enable hot-reload and state-preserving |
52 | | -// compilation error display |
53 | | -app.use(hotMiddleware) |
54 | | - |
55 | | -// serve pure static assets |
56 | | -var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) |
57 | | -app.use(staticPath, express.static('./static')) |
| 27 | +const runServer = async () => { |
| 28 | + console.log('Starting dev server...') |
| 29 | + await server.startCallback(() => { |
| 30 | + console.log(`Dev server is running at http://localhost:${port}`) |
| 31 | + console.log('Waiting for initial build...') |
| 32 | + }) |
| 33 | +} |
58 | 34 |
|
59 | | -module.exports = app.listen(port, function (err) { |
60 | | - if (err) { |
61 | | - console.log(err) |
62 | | - return |
63 | | - } |
64 | | - console.log('Listening at http://localhost:' + port + '\n') |
| 35 | +runServer().catch(err => { |
| 36 | + console.error('Failed to start dev server:', err) |
| 37 | + process.exit(1) |
65 | 38 | }) |
0 commit comments