1 | const path = require('path');
|
2 | const launchEditorMiddleware = require('launch-editor-middleware');
|
3 |
|
4 | function getDevServerConfig(config) {
|
5 | const isSSR = config.hasSSR && config.devServer.buildSSR;
|
6 | const devServerOpts = Object.assign({}, config.devServer || {});
|
7 |
|
8 | const before = devServerOpts.before;
|
9 | const after = devServerOpts.after;
|
10 |
|
11 | const ssrOpts = isSSR ? {
|
12 | index: '',
|
13 | historyApiFallback: false,
|
14 | proxy: {
|
15 | context: () => true,
|
16 | target: `http://${devServerOpts.appHost}:${devServerOpts.appPort}`,
|
17 | ws: true,
|
18 | changeOrigin: true,
|
19 | },
|
20 | } : {};
|
21 |
|
22 | delete devServerOpts.before;
|
23 | delete devServerOpts.after;
|
24 | delete devServerOpts.wwwHost;
|
25 | delete devServerOpts.appHost;
|
26 | delete devServerOpts.appPort;
|
27 | delete devServerOpts.notifyOnError;
|
28 | delete devServerOpts.open;
|
29 | delete devServerOpts.buildSSR;
|
30 |
|
31 | return Object.assign({
|
32 | host: '0.0.0.0',
|
33 | port: 3001,
|
34 | clientLogLevel: 'none',
|
35 | historyApiFallback: true,
|
36 | contentBase: path.join(config.sourcePath, 'public'),
|
37 | watchContentBase: true,
|
38 | hot: true,
|
39 | quiet: true,
|
40 | compress: true,
|
41 | publicPath: config.publicUrl,
|
42 | overlay: {warnings: false, errors: true},
|
43 | https: false,
|
44 | proxy: {},
|
45 | index: 'index.html',
|
46 | inline: true,
|
47 | open: false,
|
48 | progress: false,
|
49 | before(app, server) {
|
50 |
|
51 |
|
52 | app.use('/__open-in-editor', launchEditorMiddleware('code'));
|
53 |
|
54 |
|
55 | if (before) {
|
56 | before(app, server);
|
57 | }
|
58 | },
|
59 | after(app, server) {
|
60 |
|
61 | if (after) {
|
62 | after(app, server);
|
63 | }
|
64 | },
|
65 | }, devServerOpts, ssrOpts);
|
66 | }
|
67 |
|
68 | module.exports = {
|
69 | getDevServerConfig,
|
70 | };
|