@modern-js/server 1.19.0 → 1.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/dist/js/modern/constants.js +0 -2
- package/dist/js/modern/dev-tools/dev-middleware/index.js +10 -12
- package/dist/js/modern/dev-tools/dev-middleware/socket-server.js +0 -14
- package/dist/js/modern/server/dev-server.js +75 -47
- package/dist/js/node/constants.js +0 -2
- package/dist/js/node/dev-tools/dev-middleware/index.js +10 -12
- package/dist/js/node/dev-tools/dev-middleware/socket-server.js +0 -14
- package/dist/js/node/server/dev-server.js +77 -49
- package/dist/types/dev-tools/dev-middleware/index.d.ts +6 -8
- package/dist/types/server/dev-server.d.ts +3 -0
- package/dist/types/types.d.ts +13 -1
- package/package.json +13 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @modern-js/server
|
|
2
2
|
|
|
3
|
+
## 1.20.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [49515c5]
|
|
8
|
+
- @modern-js/utils@1.20.1
|
|
9
|
+
- @modern-js/prod-server@1.20.1
|
|
10
|
+
- @modern-js/server-utils@1.20.1
|
|
11
|
+
- @modern-js/types@1.20.1
|
|
12
|
+
|
|
13
|
+
## 1.20.0
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- 35c0959: feat(devServer): support devServer.setupMiddlewares config
|
|
18
|
+
|
|
19
|
+
feat(devServer): 支持 devServer.setupMiddlewares 配置项
|
|
20
|
+
|
|
21
|
+
- 4ddc185: chore(builder): bump webpack to 5.74.0
|
|
22
|
+
|
|
23
|
+
chore(builder): 升级 webpack 到 5.74.0 版本
|
|
24
|
+
|
|
25
|
+
- 66e4817: feat: support devServer.historyApiFallback
|
|
26
|
+
|
|
27
|
+
feat: 支持 devServer.historyApiFallback 配置项
|
|
28
|
+
|
|
29
|
+
- face165: chore(devServer): get devServer config from this.dev
|
|
30
|
+
|
|
31
|
+
chore(devServer): 从 this.dev 上获取 devServer 配置
|
|
32
|
+
|
|
33
|
+
- Updated dependencies [d5d570b]
|
|
34
|
+
- Updated dependencies [4ddc185]
|
|
35
|
+
- Updated dependencies [66e4817]
|
|
36
|
+
- Updated dependencies [df8ee7e]
|
|
37
|
+
- Updated dependencies [8c05089]
|
|
38
|
+
- Updated dependencies [baf7337]
|
|
39
|
+
- @modern-js/utils@1.20.0
|
|
40
|
+
- @modern-js/types@1.20.0
|
|
41
|
+
- @modern-js/prod-server@1.20.0
|
|
42
|
+
- @modern-js/server-utils@1.20.0
|
|
43
|
+
|
|
3
44
|
## 1.19.0
|
|
4
45
|
|
|
5
46
|
### Patch Changes
|
|
@@ -16,7 +16,7 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
16
16
|
constructor({
|
|
17
17
|
compiler,
|
|
18
18
|
dev,
|
|
19
|
-
|
|
19
|
+
devMiddleware
|
|
20
20
|
}) {
|
|
21
21
|
super();
|
|
22
22
|
|
|
@@ -28,11 +28,8 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
28
28
|
|
|
29
29
|
_defineProperty(this, "socketServer", void 0);
|
|
30
30
|
|
|
31
|
-
_defineProperty(this, "config", void 0);
|
|
32
|
-
|
|
33
31
|
this.compiler = compiler;
|
|
34
|
-
this.devOptions = dev;
|
|
35
|
-
this.config = config; // init socket server
|
|
32
|
+
this.devOptions = dev; // init socket server
|
|
36
33
|
|
|
37
34
|
this.socketServer = new SocketServer(dev); // Todo: should remove after abstract dev middleware
|
|
38
35
|
|
|
@@ -43,7 +40,7 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
43
40
|
|
|
44
41
|
this.setupHooks(); // start dev middleware
|
|
45
42
|
|
|
46
|
-
this.middleware = this.setupDevMiddleware();
|
|
43
|
+
this.middleware = this.setupDevMiddleware(devMiddleware);
|
|
47
44
|
}
|
|
48
45
|
}
|
|
49
46
|
|
|
@@ -75,6 +72,10 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
|
|
75
|
+
sockWrite(type, data) {
|
|
76
|
+
this.socketServer.sockWrite(type, data);
|
|
77
|
+
}
|
|
78
|
+
|
|
78
79
|
setupHooks() {
|
|
79
80
|
const invalidPlugin = () => {
|
|
80
81
|
this.socketServer.sockWrite('invalid');
|
|
@@ -105,15 +106,12 @@ export default class DevMiddleware extends EventEmitter {
|
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
|
|
108
|
-
setupDevMiddleware() {
|
|
109
|
-
var _config$tools, _config$tools$devServ;
|
|
110
|
-
|
|
109
|
+
setupDevMiddleware(devMiddleware = webpackDevMiddleware) {
|
|
111
110
|
const {
|
|
112
|
-
config,
|
|
113
111
|
devOptions
|
|
114
112
|
} = this;
|
|
115
|
-
const middleware =
|
|
116
|
-
headers:
|
|
113
|
+
const middleware = devMiddleware(this.compiler, _objectSpread({
|
|
114
|
+
headers: devOptions.headers,
|
|
117
115
|
stats: false
|
|
118
116
|
}, devOptions.devMiddleware));
|
|
119
117
|
return middleware;
|
|
@@ -94,8 +94,6 @@ export default class SocketServer {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
onConnect(socket) {
|
|
97
|
-
var _this$options$client2, _this$options$client3, _this$options$client4;
|
|
98
|
-
|
|
99
97
|
const connection = socket;
|
|
100
98
|
connection.isAlive = true;
|
|
101
99
|
connection.on('pong', () => {
|
|
@@ -115,24 +113,12 @@ export default class SocketServer {
|
|
|
115
113
|
}
|
|
116
114
|
});
|
|
117
115
|
|
|
118
|
-
if ((_this$options$client2 = this.options.client) !== null && _this$options$client2 !== void 0 && _this$options$client2.logging) {
|
|
119
|
-
this.singleWrite(connection, 'logging', this.options.client.logging);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
116
|
if (this.options.hot || this.options.hot === 'only') {
|
|
123
117
|
this.singleWrite(connection, 'hot');
|
|
124
118
|
}
|
|
125
119
|
|
|
126
120
|
if (this.options.liveReload) {
|
|
127
121
|
this.singleWrite(connection, 'liveReload');
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if ((_this$options$client3 = this.options.client) !== null && _this$options$client3 !== void 0 && _this$options$client3.progress) {
|
|
131
|
-
this.singleWrite(connection, 'progress', this.options.client.progress);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if ((_this$options$client4 = this.options.client) !== null && _this$options$client4 !== void 0 && _this$options$client4.overlay) {
|
|
135
|
-
this.singleWrite(connection, 'overlay', this.options.client.overlay);
|
|
136
122
|
} // send first stats to active client sock if stats exist
|
|
137
123
|
|
|
138
124
|
|
|
@@ -33,7 +33,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
33
33
|
this.devMiddleware = new DevMiddleware({
|
|
34
34
|
dev: this.dev,
|
|
35
35
|
compiler: options.compiler,
|
|
36
|
-
|
|
36
|
+
devMiddleware: options.devMiddleware
|
|
37
37
|
});
|
|
38
38
|
enableRegister(this.pwd, this.conf);
|
|
39
39
|
}
|
|
@@ -44,22 +44,10 @@ export class ModernDevServer extends ModernServer {
|
|
|
44
44
|
return _objectSpread(_objectSpread(_objectSpread({}, defaultOptions), devOptions), {}, {
|
|
45
45
|
client: _objectSpread(_objectSpread({}, defaultOptions.client), devOptions === null || devOptions === void 0 ? void 0 : devOptions.client)
|
|
46
46
|
});
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
async onInit(runner, app) {
|
|
51
|
-
var _conf$tools, _conf$tools$devServer;
|
|
52
|
-
|
|
53
|
-
this.runner = runner;
|
|
54
|
-
const {
|
|
55
|
-
conf,
|
|
56
|
-
pwd,
|
|
57
|
-
dev,
|
|
58
|
-
devMiddleware
|
|
59
|
-
} = this; // before dev handler
|
|
47
|
+
}
|
|
60
48
|
|
|
61
|
-
|
|
62
|
-
|
|
49
|
+
addMiddlewareHandler(handlers) {
|
|
50
|
+
handlers.forEach(handler => {
|
|
63
51
|
this.addHandler((ctx, next) => {
|
|
64
52
|
const {
|
|
65
53
|
req,
|
|
@@ -68,9 +56,64 @@ export class ModernDevServer extends ModernServer {
|
|
|
68
56
|
return handler(req, res, next);
|
|
69
57
|
});
|
|
70
58
|
});
|
|
71
|
-
|
|
72
|
-
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
applySetupMiddlewares() {
|
|
62
|
+
const setupMiddlewares = this.dev.setupMiddlewares || [];
|
|
63
|
+
const serverOptions = {
|
|
64
|
+
sockWrite: (type, data) => this.devMiddleware.sockWrite(type, data)
|
|
65
|
+
};
|
|
66
|
+
const befores = [];
|
|
67
|
+
const afters = [];
|
|
68
|
+
setupMiddlewares.forEach(handler => {
|
|
69
|
+
handler({
|
|
70
|
+
unshift: (...handlers) => befores.unshift(...handlers),
|
|
71
|
+
push: (...handlers) => afters.push(...handlers)
|
|
72
|
+
}, serverOptions);
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
befores,
|
|
76
|
+
afters
|
|
77
|
+
};
|
|
78
|
+
} // Complete the preparation of services
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
async onInit(runner, app) {
|
|
82
|
+
this.runner = runner;
|
|
83
|
+
const {
|
|
84
|
+
dev
|
|
85
|
+
} = this; // Order: devServer.before => setupMiddlewares.unshift => internal middlewares => setupMiddlewares.push => devServer.after
|
|
86
|
+
|
|
87
|
+
const {
|
|
88
|
+
befores,
|
|
89
|
+
afters
|
|
90
|
+
} = this.applySetupMiddlewares(); // before dev handler
|
|
91
|
+
|
|
92
|
+
const beforeHandlers = await this.setupBeforeDevMiddleware();
|
|
93
|
+
this.addMiddlewareHandler([...beforeHandlers, ...befores]);
|
|
94
|
+
await this.applyDefaultMiddlewares(app); // after dev handler
|
|
95
|
+
|
|
96
|
+
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
97
|
+
this.addMiddlewareHandler([...afters, ...afterHandlers]);
|
|
98
|
+
await super.onInit(runner, app); // watch mock/ server/ api/ dir file change
|
|
99
|
+
|
|
100
|
+
if (dev.watch) {
|
|
101
|
+
this.startWatcher();
|
|
102
|
+
app.on('close', async () => {
|
|
103
|
+
var _this$watcher;
|
|
73
104
|
|
|
105
|
+
await ((_this$watcher = this.watcher) === null || _this$watcher === void 0 ? void 0 : _this$watcher.close());
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async applyDefaultMiddlewares(app) {
|
|
111
|
+
const {
|
|
112
|
+
pwd,
|
|
113
|
+
dev,
|
|
114
|
+
devMiddleware
|
|
115
|
+
} = this;
|
|
116
|
+
this.addHandler((ctx, next) => {
|
|
74
117
|
// allow hmr request cross-domain, because the user may use global proxy
|
|
75
118
|
if (ctx.path.includes('hot-update')) {
|
|
76
119
|
ctx.res.setHeader('Access-Control-Allow-Origin', '*');
|
|
@@ -78,7 +121,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
78
121
|
} // 用户在 devServer 上配置的 headers 不会对 html 的请求生效,加入下面代码,使配置的 headers 对所有请求生效
|
|
79
122
|
|
|
80
123
|
|
|
81
|
-
const confHeaders =
|
|
124
|
+
const confHeaders = dev.headers;
|
|
82
125
|
|
|
83
126
|
if (confHeaders) {
|
|
84
127
|
for (const [key, value] of Object.entries(confHeaders)) {
|
|
@@ -100,7 +143,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
100
143
|
}
|
|
101
144
|
}); // dev proxy handler, each proxy has own handler
|
|
102
145
|
|
|
103
|
-
const proxyHandlers = createProxyHandler(
|
|
146
|
+
const proxyHandlers = createProxyHandler(dev.proxy);
|
|
104
147
|
|
|
105
148
|
if (proxyHandlers) {
|
|
106
149
|
proxyHandlers.forEach(handler => {
|
|
@@ -131,27 +174,14 @@ export class ModernDevServer extends ModernServer {
|
|
|
131
174
|
} else {
|
|
132
175
|
next();
|
|
133
176
|
}
|
|
134
|
-
}); // after dev handler
|
|
135
|
-
|
|
136
|
-
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
137
|
-
afterHandlers.forEach(handler => {
|
|
138
|
-
this.addHandler((ctx, next) => {
|
|
139
|
-
const {
|
|
140
|
-
req,
|
|
141
|
-
res
|
|
142
|
-
} = ctx;
|
|
143
|
-
return handler(req, res, next);
|
|
144
|
-
});
|
|
145
177
|
});
|
|
146
|
-
await super.onInit(runner, app); // watch mock/ server/ api/ dir file change
|
|
147
178
|
|
|
148
|
-
if (dev.
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
});
|
|
179
|
+
if (dev.historyApiFallback) {
|
|
180
|
+
const {
|
|
181
|
+
default: connectHistoryApiFallback
|
|
182
|
+
} = await import('connect-history-api-fallback');
|
|
183
|
+
const historyApiFallbackMiddleware = connectHistoryApiFallback(typeof dev.historyApiFallback === 'boolean' ? {} : dev.historyApiFallback);
|
|
184
|
+
this.addHandler((ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next));
|
|
155
185
|
}
|
|
156
186
|
}
|
|
157
187
|
|
|
@@ -234,25 +264,23 @@ export class ModernDevServer extends ModernServer {
|
|
|
234
264
|
}
|
|
235
265
|
|
|
236
266
|
async setupBeforeDevMiddleware() {
|
|
237
|
-
var _conf$tools$devServer2;
|
|
238
|
-
|
|
239
267
|
const {
|
|
240
268
|
runner,
|
|
241
|
-
conf
|
|
269
|
+
conf,
|
|
270
|
+
dev
|
|
242
271
|
} = this;
|
|
243
|
-
const setupMids =
|
|
272
|
+
const setupMids = dev.before || [];
|
|
244
273
|
const pluginMids = await runner.beforeDevServer(conf);
|
|
245
274
|
return [...setupMids, ...pluginMids].flat();
|
|
246
275
|
}
|
|
247
276
|
|
|
248
277
|
async setupAfterDevMiddleware() {
|
|
249
|
-
var _conf$tools$devServer3;
|
|
250
|
-
|
|
251
278
|
const {
|
|
252
279
|
runner,
|
|
253
|
-
conf
|
|
280
|
+
conf,
|
|
281
|
+
dev
|
|
254
282
|
} = this;
|
|
255
|
-
const setupMids =
|
|
283
|
+
const setupMids = dev.after || [];
|
|
256
284
|
const pluginMids = await runner.afterDevServer(conf);
|
|
257
285
|
return [...pluginMids, ...setupMids].flat();
|
|
258
286
|
}
|
|
@@ -28,7 +28,7 @@ class DevMiddleware extends _events.EventEmitter {
|
|
|
28
28
|
constructor({
|
|
29
29
|
compiler,
|
|
30
30
|
dev,
|
|
31
|
-
|
|
31
|
+
devMiddleware
|
|
32
32
|
}) {
|
|
33
33
|
super();
|
|
34
34
|
|
|
@@ -40,11 +40,8 @@ class DevMiddleware extends _events.EventEmitter {
|
|
|
40
40
|
|
|
41
41
|
_defineProperty(this, "socketServer", void 0);
|
|
42
42
|
|
|
43
|
-
_defineProperty(this, "config", void 0);
|
|
44
|
-
|
|
45
43
|
this.compiler = compiler;
|
|
46
|
-
this.devOptions = dev;
|
|
47
|
-
this.config = config; // init socket server
|
|
44
|
+
this.devOptions = dev; // init socket server
|
|
48
45
|
|
|
49
46
|
this.socketServer = new _socketServer.default(dev); // Todo: should remove after abstract dev middleware
|
|
50
47
|
|
|
@@ -55,7 +52,7 @@ class DevMiddleware extends _events.EventEmitter {
|
|
|
55
52
|
|
|
56
53
|
this.setupHooks(); // start dev middleware
|
|
57
54
|
|
|
58
|
-
this.middleware = this.setupDevMiddleware();
|
|
55
|
+
this.middleware = this.setupDevMiddleware(devMiddleware);
|
|
59
56
|
}
|
|
60
57
|
}
|
|
61
58
|
|
|
@@ -87,6 +84,10 @@ class DevMiddleware extends _events.EventEmitter {
|
|
|
87
84
|
}
|
|
88
85
|
}
|
|
89
86
|
|
|
87
|
+
sockWrite(type, data) {
|
|
88
|
+
this.socketServer.sockWrite(type, data);
|
|
89
|
+
}
|
|
90
|
+
|
|
90
91
|
setupHooks() {
|
|
91
92
|
const invalidPlugin = () => {
|
|
92
93
|
this.socketServer.sockWrite('invalid');
|
|
@@ -117,15 +118,12 @@ class DevMiddleware extends _events.EventEmitter {
|
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
|
|
120
|
-
setupDevMiddleware() {
|
|
121
|
-
var _config$tools, _config$tools$devServ;
|
|
122
|
-
|
|
121
|
+
setupDevMiddleware(devMiddleware = _webpackDevMiddleware.default) {
|
|
123
122
|
const {
|
|
124
|
-
config,
|
|
125
123
|
devOptions
|
|
126
124
|
} = this;
|
|
127
|
-
const middleware = (
|
|
128
|
-
headers:
|
|
125
|
+
const middleware = devMiddleware(this.compiler, _objectSpread({
|
|
126
|
+
headers: devOptions.headers,
|
|
129
127
|
stats: false
|
|
130
128
|
}, devOptions.devMiddleware));
|
|
131
129
|
return middleware;
|
|
@@ -105,8 +105,6 @@ class SocketServer {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
onConnect(socket) {
|
|
108
|
-
var _this$options$client2, _this$options$client3, _this$options$client4;
|
|
109
|
-
|
|
110
108
|
const connection = socket;
|
|
111
109
|
connection.isAlive = true;
|
|
112
110
|
connection.on('pong', () => {
|
|
@@ -126,24 +124,12 @@ class SocketServer {
|
|
|
126
124
|
}
|
|
127
125
|
});
|
|
128
126
|
|
|
129
|
-
if ((_this$options$client2 = this.options.client) !== null && _this$options$client2 !== void 0 && _this$options$client2.logging) {
|
|
130
|
-
this.singleWrite(connection, 'logging', this.options.client.logging);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
127
|
if (this.options.hot || this.options.hot === 'only') {
|
|
134
128
|
this.singleWrite(connection, 'hot');
|
|
135
129
|
}
|
|
136
130
|
|
|
137
131
|
if (this.options.liveReload) {
|
|
138
132
|
this.singleWrite(connection, 'liveReload');
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if ((_this$options$client3 = this.options.client) !== null && _this$options$client3 !== void 0 && _this$options$client3.progress) {
|
|
142
|
-
this.singleWrite(connection, 'progress', this.options.client.progress);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if ((_this$options$client4 = this.options.client) !== null && _this$options$client4 !== void 0 && _this$options$client4.overlay) {
|
|
146
|
-
this.singleWrite(connection, 'overlay', this.options.client.overlay);
|
|
147
133
|
} // send first stats to active client sock if stats exist
|
|
148
134
|
|
|
149
135
|
|
|
@@ -25,12 +25,12 @@ var _watcher = _interopRequireWildcard(require("../dev-tools/watcher"));
|
|
|
25
25
|
|
|
26
26
|
var _devMiddleware = _interopRequireDefault(require("../dev-tools/dev-middleware"));
|
|
27
27
|
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
28
30
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
29
31
|
|
|
30
32
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
33
|
|
|
32
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
33
|
-
|
|
34
34
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
35
35
|
|
|
36
36
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -56,7 +56,7 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
56
56
|
this.devMiddleware = new _devMiddleware.default({
|
|
57
57
|
dev: this.dev,
|
|
58
58
|
compiler: options.compiler,
|
|
59
|
-
|
|
59
|
+
devMiddleware: options.devMiddleware
|
|
60
60
|
});
|
|
61
61
|
(0, _register.enableRegister)(this.pwd, this.conf);
|
|
62
62
|
}
|
|
@@ -67,22 +67,10 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
67
67
|
return _objectSpread(_objectSpread(_objectSpread({}, defaultOptions), devOptions), {}, {
|
|
68
68
|
client: _objectSpread(_objectSpread({}, defaultOptions.client), devOptions === null || devOptions === void 0 ? void 0 : devOptions.client)
|
|
69
69
|
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
async onInit(runner, app) {
|
|
74
|
-
var _conf$tools, _conf$tools$devServer;
|
|
75
|
-
|
|
76
|
-
this.runner = runner;
|
|
77
|
-
const {
|
|
78
|
-
conf,
|
|
79
|
-
pwd,
|
|
80
|
-
dev,
|
|
81
|
-
devMiddleware
|
|
82
|
-
} = this; // before dev handler
|
|
70
|
+
}
|
|
83
71
|
|
|
84
|
-
|
|
85
|
-
|
|
72
|
+
addMiddlewareHandler(handlers) {
|
|
73
|
+
handlers.forEach(handler => {
|
|
86
74
|
this.addHandler((ctx, next) => {
|
|
87
75
|
const {
|
|
88
76
|
req,
|
|
@@ -91,9 +79,64 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
91
79
|
return handler(req, res, next);
|
|
92
80
|
});
|
|
93
81
|
});
|
|
94
|
-
|
|
95
|
-
var _this$conf$tools$devS;
|
|
82
|
+
}
|
|
96
83
|
|
|
84
|
+
applySetupMiddlewares() {
|
|
85
|
+
const setupMiddlewares = this.dev.setupMiddlewares || [];
|
|
86
|
+
const serverOptions = {
|
|
87
|
+
sockWrite: (type, data) => this.devMiddleware.sockWrite(type, data)
|
|
88
|
+
};
|
|
89
|
+
const befores = [];
|
|
90
|
+
const afters = [];
|
|
91
|
+
setupMiddlewares.forEach(handler => {
|
|
92
|
+
handler({
|
|
93
|
+
unshift: (...handlers) => befores.unshift(...handlers),
|
|
94
|
+
push: (...handlers) => afters.push(...handlers)
|
|
95
|
+
}, serverOptions);
|
|
96
|
+
});
|
|
97
|
+
return {
|
|
98
|
+
befores,
|
|
99
|
+
afters
|
|
100
|
+
};
|
|
101
|
+
} // Complete the preparation of services
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
async onInit(runner, app) {
|
|
105
|
+
this.runner = runner;
|
|
106
|
+
const {
|
|
107
|
+
dev
|
|
108
|
+
} = this; // Order: devServer.before => setupMiddlewares.unshift => internal middlewares => setupMiddlewares.push => devServer.after
|
|
109
|
+
|
|
110
|
+
const {
|
|
111
|
+
befores,
|
|
112
|
+
afters
|
|
113
|
+
} = this.applySetupMiddlewares(); // before dev handler
|
|
114
|
+
|
|
115
|
+
const beforeHandlers = await this.setupBeforeDevMiddleware();
|
|
116
|
+
this.addMiddlewareHandler([...beforeHandlers, ...befores]);
|
|
117
|
+
await this.applyDefaultMiddlewares(app); // after dev handler
|
|
118
|
+
|
|
119
|
+
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
120
|
+
this.addMiddlewareHandler([...afters, ...afterHandlers]);
|
|
121
|
+
await super.onInit(runner, app); // watch mock/ server/ api/ dir file change
|
|
122
|
+
|
|
123
|
+
if (dev.watch) {
|
|
124
|
+
this.startWatcher();
|
|
125
|
+
app.on('close', async () => {
|
|
126
|
+
var _this$watcher;
|
|
127
|
+
|
|
128
|
+
await ((_this$watcher = this.watcher) === null || _this$watcher === void 0 ? void 0 : _this$watcher.close());
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async applyDefaultMiddlewares(app) {
|
|
134
|
+
const {
|
|
135
|
+
pwd,
|
|
136
|
+
dev,
|
|
137
|
+
devMiddleware
|
|
138
|
+
} = this;
|
|
139
|
+
this.addHandler((ctx, next) => {
|
|
97
140
|
// allow hmr request cross-domain, because the user may use global proxy
|
|
98
141
|
if (ctx.path.includes('hot-update')) {
|
|
99
142
|
ctx.res.setHeader('Access-Control-Allow-Origin', '*');
|
|
@@ -101,7 +144,7 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
101
144
|
} // 用户在 devServer 上配置的 headers 不会对 html 的请求生效,加入下面代码,使配置的 headers 对所有请求生效
|
|
102
145
|
|
|
103
146
|
|
|
104
|
-
const confHeaders =
|
|
147
|
+
const confHeaders = dev.headers;
|
|
105
148
|
|
|
106
149
|
if (confHeaders) {
|
|
107
150
|
for (const [key, value] of Object.entries(confHeaders)) {
|
|
@@ -123,7 +166,7 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
123
166
|
}
|
|
124
167
|
}); // dev proxy handler, each proxy has own handler
|
|
125
168
|
|
|
126
|
-
const proxyHandlers = (0, _prodServer.createProxyHandler)(
|
|
169
|
+
const proxyHandlers = (0, _prodServer.createProxyHandler)(dev.proxy);
|
|
127
170
|
|
|
128
171
|
if (proxyHandlers) {
|
|
129
172
|
proxyHandlers.forEach(handler => {
|
|
@@ -154,27 +197,14 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
154
197
|
} else {
|
|
155
198
|
next();
|
|
156
199
|
}
|
|
157
|
-
}); // after dev handler
|
|
158
|
-
|
|
159
|
-
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
160
|
-
afterHandlers.forEach(handler => {
|
|
161
|
-
this.addHandler((ctx, next) => {
|
|
162
|
-
const {
|
|
163
|
-
req,
|
|
164
|
-
res
|
|
165
|
-
} = ctx;
|
|
166
|
-
return handler(req, res, next);
|
|
167
|
-
});
|
|
168
200
|
});
|
|
169
|
-
await super.onInit(runner, app); // watch mock/ server/ api/ dir file change
|
|
170
|
-
|
|
171
|
-
if (dev.watch) {
|
|
172
|
-
this.startWatcher();
|
|
173
|
-
app.on('close', async () => {
|
|
174
|
-
var _this$watcher;
|
|
175
201
|
|
|
176
|
-
|
|
177
|
-
|
|
202
|
+
if (dev.historyApiFallback) {
|
|
203
|
+
const {
|
|
204
|
+
default: connectHistoryApiFallback
|
|
205
|
+
} = await Promise.resolve().then(() => _interopRequireWildcard(require('connect-history-api-fallback')));
|
|
206
|
+
const historyApiFallbackMiddleware = connectHistoryApiFallback(typeof dev.historyApiFallback === 'boolean' ? {} : dev.historyApiFallback);
|
|
207
|
+
this.addHandler((ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next));
|
|
178
208
|
}
|
|
179
209
|
}
|
|
180
210
|
|
|
@@ -259,25 +289,23 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
259
289
|
}
|
|
260
290
|
|
|
261
291
|
async setupBeforeDevMiddleware() {
|
|
262
|
-
var _conf$tools$devServer2;
|
|
263
|
-
|
|
264
292
|
const {
|
|
265
293
|
runner,
|
|
266
|
-
conf
|
|
294
|
+
conf,
|
|
295
|
+
dev
|
|
267
296
|
} = this;
|
|
268
|
-
const setupMids =
|
|
297
|
+
const setupMids = dev.before || [];
|
|
269
298
|
const pluginMids = await runner.beforeDevServer(conf);
|
|
270
299
|
return [...setupMids, ...pluginMids].flat();
|
|
271
300
|
}
|
|
272
301
|
|
|
273
302
|
async setupAfterDevMiddleware() {
|
|
274
|
-
var _conf$tools$devServer3;
|
|
275
|
-
|
|
276
303
|
const {
|
|
277
304
|
runner,
|
|
278
|
-
conf
|
|
305
|
+
conf,
|
|
306
|
+
dev
|
|
279
307
|
} = this;
|
|
280
|
-
const setupMids =
|
|
308
|
+
const setupMids = dev.after || [];
|
|
281
309
|
const pluginMids = await runner.afterDevServer(conf);
|
|
282
310
|
return [...pluginMids, ...setupMids].flat();
|
|
283
311
|
}
|
|
@@ -1,29 +1,27 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
|
-
import { Server
|
|
3
|
+
import { Server } from 'http';
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
5
|
import { Compiler, MultiCompiler } from 'webpack';
|
|
6
|
-
import
|
|
7
|
-
import type { NormalizedConfig } from '@modern-js/core';
|
|
8
|
-
import { DevServerOptions } from '../../types';
|
|
6
|
+
import { DevServerOptions, DevMiddlewareAPI, CustomDevMiddleware } from '../../types';
|
|
9
7
|
declare type Options = {
|
|
10
8
|
compiler: MultiCompiler | Compiler | null;
|
|
11
9
|
dev: DevServerOptions;
|
|
12
|
-
|
|
10
|
+
devMiddleware?: CustomDevMiddleware;
|
|
13
11
|
};
|
|
14
12
|
export default class DevMiddleware extends EventEmitter {
|
|
15
|
-
middleware?:
|
|
13
|
+
middleware?: DevMiddlewareAPI;
|
|
16
14
|
private compiler;
|
|
17
15
|
private devOptions;
|
|
18
16
|
private socketServer;
|
|
19
|
-
private config;
|
|
20
17
|
constructor({
|
|
21
18
|
compiler,
|
|
22
19
|
dev,
|
|
23
|
-
|
|
20
|
+
devMiddleware
|
|
24
21
|
}: Options);
|
|
25
22
|
init(app: Server): void;
|
|
26
23
|
private setupDevServerPlugin;
|
|
24
|
+
sockWrite(type: string, data?: Record<string, any> | string | boolean): void;
|
|
27
25
|
private setupHooks;
|
|
28
26
|
private setupDevMiddleware;
|
|
29
27
|
private isClientCompiler;
|
|
@@ -11,7 +11,10 @@ export declare class ModernDevServer extends ModernServer {
|
|
|
11
11
|
private watcher?;
|
|
12
12
|
constructor(options: ModernDevServerOptions);
|
|
13
13
|
private getDevOptions;
|
|
14
|
+
private addMiddlewareHandler;
|
|
15
|
+
private applySetupMiddlewares;
|
|
14
16
|
onInit(runner: ServerHookRunner, app: Server): Promise<void>;
|
|
17
|
+
private applyDefaultMiddlewares;
|
|
15
18
|
onRepack(options?: BuildOptions): void;
|
|
16
19
|
createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server | import("https").Server>;
|
|
17
20
|
protected warmupSSRBundle(): void;
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { IncomingMessage, ServerResponse } from 'http';
|
|
1
3
|
import type webpack from 'webpack';
|
|
2
|
-
import type { DevServerOptions, DevServerHttpsOptions } from '@modern-js/types';
|
|
4
|
+
import type { DevServerOptions, DevServerHttpsOptions, NextFunction } from '@modern-js/types';
|
|
3
5
|
import type { ModernServerOptions } from '@modern-js/prod-server';
|
|
4
6
|
export type { DevServerOptions, DevServerHttpsOptions };
|
|
7
|
+
declare type Middleware = (req: IncomingMessage, res: ServerResponse, next: NextFunction) => Promise<void>;
|
|
8
|
+
export declare type DevMiddlewareAPI = Middleware & {
|
|
9
|
+
close: (callback: (err: Error | null | undefined) => void) => any;
|
|
10
|
+
};
|
|
11
|
+
export declare type CustomDevMiddleware = (compiler: webpack.MultiCompiler | webpack.Compiler, options: {
|
|
12
|
+
headers?: Record<string, string>;
|
|
13
|
+
writeToDisk?: boolean | ((filename: string) => boolean);
|
|
14
|
+
stats?: boolean;
|
|
15
|
+
}) => DevMiddlewareAPI;
|
|
5
16
|
export declare type ExtraOptions = {
|
|
6
17
|
dev: boolean | Partial<DevServerOptions>;
|
|
7
18
|
compiler: webpack.MultiCompiler | webpack.Compiler | null;
|
|
19
|
+
devMiddleware?: CustomDevMiddleware;
|
|
8
20
|
};
|
|
9
21
|
export declare type ModernDevServerOptions = ModernServerOptions & ExtraOptions;
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.
|
|
14
|
+
"version": "1.20.1",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -30,29 +30,32 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@babel/core": "^7.18.0",
|
|
32
32
|
"@babel/register": "^7.17.7",
|
|
33
|
-
"@modern-js/prod-server": "1.
|
|
34
|
-
"@modern-js/server-utils": "1.
|
|
35
|
-
"@modern-js/types": "1.
|
|
36
|
-
"@modern-js/utils": "1.
|
|
33
|
+
"@modern-js/prod-server": "1.20.1",
|
|
34
|
+
"@modern-js/server-utils": "1.20.1",
|
|
35
|
+
"@modern-js/types": "1.20.1",
|
|
36
|
+
"@modern-js/utils": "1.20.1",
|
|
37
|
+
"connect-history-api-fallback": "^2.0.0",
|
|
37
38
|
"devcert": "^1.2.2",
|
|
38
39
|
"minimatch": "^3.0.4",
|
|
39
40
|
"path-to-regexp": "^6.2.0",
|
|
40
41
|
"ws": "^8.2.0"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
|
-
"@modern-js/core": "1.
|
|
44
|
-
"@modern-js/server-core": "1.
|
|
45
|
-
"@scripts/build": "1.
|
|
46
|
-
"@scripts/jest-config": "1.
|
|
44
|
+
"@modern-js/core": "1.20.1",
|
|
45
|
+
"@modern-js/server-core": "1.20.1",
|
|
46
|
+
"@scripts/build": "1.20.1",
|
|
47
|
+
"@scripts/jest-config": "1.20.1",
|
|
48
|
+
"@types/connect-history-api-fallback": "^1.3.5",
|
|
47
49
|
"@types/jest": "^27",
|
|
48
50
|
"@types/minimatch": "^3.0.5",
|
|
49
51
|
"@types/node": "^14",
|
|
50
52
|
"@types/ws": "^7.4.7",
|
|
51
53
|
"jest": "^27",
|
|
54
|
+
"node-mocks-http": "^1.11.0",
|
|
52
55
|
"ts-node": "^10.1.0",
|
|
53
56
|
"tsconfig-paths": "3.14.1",
|
|
54
57
|
"typescript": "^4",
|
|
55
|
-
"webpack": "^5.
|
|
58
|
+
"webpack": "^5.74.0",
|
|
56
59
|
"websocket": "^1"
|
|
57
60
|
},
|
|
58
61
|
"peerDependencies": {
|