@modern-js/server 1.1.1-canary.3 → 1.1.3-beta.0
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 +28 -0
- package/dist/js/modern/libs/hook-api/route.js +37 -0
- package/dist/js/modern/libs/{hook-api.js → hook-api/template.js} +0 -0
- package/dist/js/modern/libs/route/index.js +4 -0
- package/dist/js/modern/libs/route/matcher.js +5 -1
- package/dist/js/modern/libs/serve-file.js +23 -25
- package/dist/js/modern/server/{web-server.js → dev-server/dev-server-split.js} +9 -7
- package/dist/js/modern/server/{dev-server.js → dev-server/dev-server.js} +41 -22
- package/dist/js/modern/server/dev-server/index.js +2 -0
- package/dist/js/modern/server/index.js +61 -62
- package/dist/js/modern/server/{api-server.js → modern-server-split.js} +6 -10
- package/dist/js/modern/server/modern-server.js +78 -25
- package/dist/js/modern/utils.js +2 -2
- package/dist/js/node/libs/hook-api/route.js +46 -0
- package/dist/js/node/libs/{hook-api.js → hook-api/template.js} +0 -0
- package/dist/js/node/libs/route/index.js +4 -0
- package/dist/js/node/libs/route/matcher.js +5 -1
- package/dist/js/node/libs/serve-file.js +25 -26
- package/dist/js/node/server/{api-server.js → dev-server/dev-server-split.js} +7 -12
- package/dist/js/node/server/{dev-server.js → dev-server/dev-server.js} +42 -21
- package/dist/js/node/server/dev-server/index.js +27 -0
- package/dist/js/node/server/index.js +67 -63
- package/dist/js/node/server/{web-server.js → modern-server-split.js} +10 -9
- package/dist/js/node/server/modern-server.js +80 -25
- package/dist/js/node/utils.js +2 -2
- package/dist/types/libs/hook-api/route.d.ts +13 -0
- package/dist/types/libs/{hook-api.d.ts → hook-api/template.d.ts} +0 -0
- package/dist/types/libs/route/index.d.ts +1 -0
- package/dist/types/libs/route/matcher.d.ts +1 -0
- package/dist/types/libs/serve-file.d.ts +1 -1
- package/dist/types/server/{api-server.d.ts → dev-server/dev-server-split.d.ts} +7 -8
- package/dist/types/server/{dev-server.d.ts → dev-server/dev-server.d.ts} +6 -5
- package/dist/types/server/dev-server/index.d.ts +2 -0
- package/dist/types/server/index.d.ts +3 -1
- package/dist/types/server/{web-server.d.ts → modern-server-split.d.ts} +5 -4
- package/dist/types/server/modern-server.d.ts +7 -5
- package/dist/types/utils.d.ts +1 -1
- package/package.json +10 -10
- package/src/libs/hook-api/route.ts +38 -0
- package/src/libs/{hook-api.ts → hook-api/template.ts} +0 -0
- package/src/libs/route/index.ts +4 -0
- package/src/libs/route/matcher.ts +5 -1
- package/src/libs/serve-file.ts +16 -20
- package/src/server/{api-server.ts → dev-server/dev-server-split.ts} +9 -11
- package/src/server/{dev-server.ts → dev-server/dev-server.ts} +56 -23
- package/src/server/dev-server/index.ts +2 -0
- package/src/server/index.ts +69 -46
- package/src/server/{web-server.ts → modern-server-split.ts} +12 -10
- package/src/server/modern-server.ts +87 -40
- package/src/utils.ts +2 -2
|
@@ -11,10 +11,11 @@ function _objectWithoutProperties(source, excluded) { if (source == null) return
|
|
|
11
11
|
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
12
12
|
|
|
13
13
|
/* eslint-disable max-lines */
|
|
14
|
+
import { createServer } from 'http';
|
|
14
15
|
import util from 'util';
|
|
15
16
|
import path from 'path';
|
|
16
17
|
import { fs, ROUTE_SPEC_FILE } from '@modern-js/utils';
|
|
17
|
-
import {
|
|
18
|
+
import { createMiddlewareCollecter } from '@modern-js/server-utils';
|
|
18
19
|
import mime from 'mime-types';
|
|
19
20
|
import axios from 'axios';
|
|
20
21
|
import { RouteMatchManager } from "../libs/route";
|
|
@@ -25,7 +26,8 @@ import * as reader from "../libs/render/reader";
|
|
|
25
26
|
import { createProxyHandler } from "../libs/proxy";
|
|
26
27
|
import { createContext } from "../libs/context";
|
|
27
28
|
import { AGGRED_DIR, ApiServerMode, ERROR_DIGEST, ERROR_PAGE_TEXT } from "../constants";
|
|
28
|
-
import { createTemplateAPI } from "../libs/hook-api";
|
|
29
|
+
import { createTemplateAPI } from "../libs/hook-api/template";
|
|
30
|
+
import { createRouteAPI } from "../libs/hook-api/route";
|
|
29
31
|
const API_DIR = './api';
|
|
30
32
|
const SERVER_DIR = './server';
|
|
31
33
|
export class ModernServer {
|
|
@@ -40,7 +42,7 @@ export class ModernServer {
|
|
|
40
42
|
staticGenerate,
|
|
41
43
|
logger,
|
|
42
44
|
measure
|
|
43
|
-
}
|
|
45
|
+
}) {
|
|
44
46
|
this.pwd = void 0;
|
|
45
47
|
this.distDir = void 0;
|
|
46
48
|
this.workDir = void 0;
|
|
@@ -48,9 +50,9 @@ export class ModernServer {
|
|
|
48
50
|
this.conf = void 0;
|
|
49
51
|
this.handlers = [];
|
|
50
52
|
this.presetRoutes = void 0;
|
|
53
|
+
this.runner = void 0;
|
|
51
54
|
this.logger = void 0;
|
|
52
55
|
this.measure = void 0;
|
|
53
|
-
this.runner = void 0;
|
|
54
56
|
this.isDev = false;
|
|
55
57
|
this.staticFileHandler = void 0;
|
|
56
58
|
this.routeRenderHandler = void 0;
|
|
@@ -67,7 +69,6 @@ export class ModernServer {
|
|
|
67
69
|
this.distDir = path.join(pwd, config.output.path || '');
|
|
68
70
|
this.workDir = this.isDev ? pwd : this.distDir;
|
|
69
71
|
this.conf = config;
|
|
70
|
-
this.runner = runner;
|
|
71
72
|
this.logger = logger;
|
|
72
73
|
this.measure = measure;
|
|
73
74
|
this.router = new RouteMatchManager();
|
|
@@ -86,9 +87,10 @@ export class ModernServer {
|
|
|
86
87
|
} // server prepare
|
|
87
88
|
|
|
88
89
|
|
|
89
|
-
async init() {
|
|
90
|
+
async init(runner) {
|
|
90
91
|
var _conf$bff;
|
|
91
92
|
|
|
93
|
+
this.runner = runner;
|
|
92
94
|
const {
|
|
93
95
|
distDir,
|
|
94
96
|
isDev,
|
|
@@ -120,12 +122,17 @@ export class ModernServer {
|
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
await this.prepareFrameHandler();
|
|
125
|
+
const {
|
|
126
|
+
favicon,
|
|
127
|
+
faviconByEntries
|
|
128
|
+
} = this.conf.output;
|
|
129
|
+
const favicons = this.prepareFavicons(favicon, faviconByEntries); // Only work when without setting `assetPrefix`.
|
|
130
|
+
// Setting `assetPrefix` means these resources should be uploaded to CDN.
|
|
131
|
+
|
|
132
|
+
const staticPathRegExp = new RegExp(`^/(static/|upload/|favicon.ico|icon.png${favicons.length > 0 ? `|${favicons.join('|')}` : ''})`);
|
|
123
133
|
this.staticFileHandler = createStaticFileHandler([{
|
|
124
|
-
path:
|
|
125
|
-
target:
|
|
126
|
-
}, {
|
|
127
|
-
path: '/upload/',
|
|
128
|
-
target: path.join(distDir, 'upload')
|
|
134
|
+
path: staticPathRegExp,
|
|
135
|
+
target: distDir
|
|
129
136
|
}]);
|
|
130
137
|
this.routeRenderHandler = createRenderHandler({
|
|
131
138
|
distDir,
|
|
@@ -148,6 +155,10 @@ export class ModernServer {
|
|
|
148
155
|
|
|
149
156
|
close() {
|
|
150
157
|
reader.close();
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
async createHTTPServer(handler) {
|
|
161
|
+
return createServer(handler);
|
|
151
162
|
} // warmup ssr function
|
|
152
163
|
|
|
153
164
|
|
|
@@ -195,12 +206,7 @@ export class ModernServer {
|
|
|
195
206
|
const {
|
|
196
207
|
workDir,
|
|
197
208
|
runner
|
|
198
|
-
} = this; //
|
|
199
|
-
|
|
200
|
-
const {
|
|
201
|
-
api: userAPIExt,
|
|
202
|
-
web: userWebExt
|
|
203
|
-
} = gather(workDir); // server hook, gather plugin inject
|
|
209
|
+
} = this; // server hook, gather plugin inject
|
|
204
210
|
|
|
205
211
|
const _createMiddlewareColl = createMiddlewareCollecter(),
|
|
206
212
|
{
|
|
@@ -217,15 +223,17 @@ export class ModernServer {
|
|
|
217
223
|
const serverDir = path.join(workDir, SERVER_DIR); // get api or web server handler from server-framework plugin
|
|
218
224
|
|
|
219
225
|
if (await fs.pathExists(path.join(serverDir))) {
|
|
220
|
-
const webExtension = mergeExtension(pluginWebExt
|
|
226
|
+
const webExtension = mergeExtension(pluginWebExt);
|
|
221
227
|
this.frameWebHandler = await this.prepareWebHandler(webExtension);
|
|
222
228
|
}
|
|
223
229
|
|
|
224
230
|
if (fs.existsSync(apiDir)) {
|
|
225
231
|
const mode = fs.existsSync(path.join(apiDir, AGGRED_DIR.lambda)) ? ApiServerMode.frame : ApiServerMode.func; // if use lambda/, mean framework style of writing, then discard user extension
|
|
226
232
|
|
|
227
|
-
const apiExtension = mergeExtension(pluginAPIExt
|
|
228
|
-
this.frameAPIHandler = await this.prepareAPIHandler(mode, apiExtension)
|
|
233
|
+
const apiExtension = mergeExtension(pluginAPIExt);
|
|
234
|
+
this.frameAPIHandler = await this.prepareAPIHandler(mode, _objectSpread(_objectSpread({}, apiExtension), {}, {
|
|
235
|
+
modernJsConfig: this.conf
|
|
236
|
+
}));
|
|
229
237
|
}
|
|
230
238
|
}
|
|
231
239
|
/* —————————————————————— function will be overwrite —————————————————————— */
|
|
@@ -258,7 +266,7 @@ export class ModernServer {
|
|
|
258
266
|
pwd: workDir,
|
|
259
267
|
mode,
|
|
260
268
|
config: extension,
|
|
261
|
-
prefix
|
|
269
|
+
prefix: Array.isArray(prefix) ? prefix[0] : prefix
|
|
262
270
|
}, {
|
|
263
271
|
onLast: () => null
|
|
264
272
|
});
|
|
@@ -273,10 +281,30 @@ export class ModernServer {
|
|
|
273
281
|
conf
|
|
274
282
|
} = this;
|
|
275
283
|
const preMiddleware = await this.runner.preServerInit(conf);
|
|
276
|
-
preMiddleware.forEach(mid => {
|
|
284
|
+
preMiddleware.flat().forEach(mid => {
|
|
277
285
|
this.addHandler(mid);
|
|
278
286
|
});
|
|
279
287
|
}
|
|
288
|
+
|
|
289
|
+
prepareFavicons(favicon, faviconByEntries) {
|
|
290
|
+
const faviconNames = [];
|
|
291
|
+
|
|
292
|
+
if (favicon) {
|
|
293
|
+
faviconNames.push(favicon.substring(favicon.lastIndexOf('/') + 1));
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (faviconByEntries) {
|
|
297
|
+
Object.keys(faviconByEntries).forEach(f => {
|
|
298
|
+
const curFavicon = faviconByEntries[f];
|
|
299
|
+
|
|
300
|
+
if (curFavicon) {
|
|
301
|
+
faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf('/') + 1));
|
|
302
|
+
}
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return faviconNames;
|
|
307
|
+
}
|
|
280
308
|
/* —————————————————————— private function —————————————————————— */
|
|
281
309
|
// handler route.json, include api / csr / ssr
|
|
282
310
|
// eslint-disable-next-line max-statements
|
|
@@ -286,7 +314,12 @@ export class ModernServer {
|
|
|
286
314
|
const {
|
|
287
315
|
req,
|
|
288
316
|
res
|
|
289
|
-
} = context;
|
|
317
|
+
} = context;
|
|
318
|
+
await this.runner.beforeMatch({
|
|
319
|
+
context
|
|
320
|
+
}, {
|
|
321
|
+
onLast: noop
|
|
322
|
+
}); // match routes in the route spec
|
|
290
323
|
|
|
291
324
|
const matched = this.router.match(context.url);
|
|
292
325
|
|
|
@@ -295,8 +328,23 @@ export class ModernServer {
|
|
|
295
328
|
return;
|
|
296
329
|
}
|
|
297
330
|
|
|
298
|
-
const
|
|
299
|
-
|
|
331
|
+
const routeAPI = createRouteAPI(matched, this.router);
|
|
332
|
+
await this.runner.afterMatch({
|
|
333
|
+
context,
|
|
334
|
+
routeAPI
|
|
335
|
+
}, {
|
|
336
|
+
onLast: noop
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
if (res.headersSent) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const {
|
|
344
|
+
current
|
|
345
|
+
} = routeAPI;
|
|
346
|
+
const route = current.generate();
|
|
347
|
+
const params = current.parseURLParams(context.url);
|
|
300
348
|
context.setParams(params); // route is api service
|
|
301
349
|
|
|
302
350
|
if (route.isApi) {
|
|
@@ -317,6 +365,11 @@ export class ModernServer {
|
|
|
317
365
|
return;
|
|
318
366
|
}
|
|
319
367
|
|
|
368
|
+
await this.runner.beforeRender({
|
|
369
|
+
context
|
|
370
|
+
}, {
|
|
371
|
+
onLast: noop
|
|
372
|
+
});
|
|
320
373
|
const file = await this.routeRenderHandler(context, route);
|
|
321
374
|
|
|
322
375
|
if (!file) {
|
package/dist/js/modern/utils.js
CHANGED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createRouteAPI = void 0;
|
|
7
|
+
|
|
8
|
+
class RouteAPI {
|
|
9
|
+
constructor(matched, router) {
|
|
10
|
+
this.router = void 0;
|
|
11
|
+
this.current = void 0;
|
|
12
|
+
this.current = matched;
|
|
13
|
+
this.router = router;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
cur() {
|
|
17
|
+
return this.current.generate();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get(entryName) {
|
|
21
|
+
const {
|
|
22
|
+
router
|
|
23
|
+
} = this;
|
|
24
|
+
const matched = router.matchEntry(entryName);
|
|
25
|
+
return matched ? matched.generate() : null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
use(entryName) {
|
|
29
|
+
const {
|
|
30
|
+
router
|
|
31
|
+
} = this;
|
|
32
|
+
const matched = router.matchEntry(entryName);
|
|
33
|
+
|
|
34
|
+
if (matched) {
|
|
35
|
+
this.current = matched;
|
|
36
|
+
return true;
|
|
37
|
+
} else {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const createRouteAPI = (matched, router) => new RouteAPI(matched, router);
|
|
45
|
+
|
|
46
|
+
exports.createRouteAPI = createRouteAPI;
|
|
File without changes
|
|
@@ -64,6 +64,10 @@ class RouteMatchManager {
|
|
|
64
64
|
return best;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
matchEntry(entryname) {
|
|
68
|
+
return this.matchers.find(matcher => matcher.matchEntry(entryname));
|
|
69
|
+
}
|
|
70
|
+
|
|
67
71
|
getBundles() {
|
|
68
72
|
const bundles = this.specs.filter(route => route.isSSR).map(route => route.bundle);
|
|
69
73
|
return bundles;
|
|
@@ -12,7 +12,7 @@ var _pathToRegexp = require("path-to-regexp");
|
|
|
12
12
|
var _route = require("./route");
|
|
13
13
|
|
|
14
14
|
// eslint-disable-next-line no-useless-escape
|
|
15
|
-
const regCharsDetector = /[^a-zA-Z\-_0-9
|
|
15
|
+
const regCharsDetector = /[^a-zA-Z\-_0-9\/\.]/;
|
|
16
16
|
|
|
17
17
|
class RouteMatcher {
|
|
18
18
|
constructor(spec) {
|
|
@@ -68,6 +68,10 @@ class RouteMatcher {
|
|
|
68
68
|
|
|
69
69
|
return false;
|
|
70
70
|
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
matchEntry(entryName) {
|
|
74
|
+
return this.spec.entryName === entryName;
|
|
71
75
|
} // compiler urlPath to regexp if necessary
|
|
72
76
|
|
|
73
77
|
|
|
@@ -7,36 +7,35 @@ exports.createStaticFileHandler = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _serveStatic = _interopRequireDefault(require("serve-static"));
|
|
9
9
|
|
|
10
|
+
var _utils = require("@modern-js/utils");
|
|
11
|
+
|
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
13
|
|
|
12
14
|
// Todo 看看是不是能 fork 一份,即使命中也返回
|
|
13
|
-
const createStaticFileHandler = rules =>
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const hit = Object.keys(middlewares).find(u => requestUrl.startsWith(u));
|
|
26
|
-
|
|
27
|
-
if (hit) {
|
|
28
|
-
// when matches static resources, delete the first layer of req.url
|
|
29
|
-
const removed = hit;
|
|
30
|
-
context.url = requestUrl.slice(removed.length - 1);
|
|
31
|
-
middlewares[hit](req, res, () => {
|
|
32
|
-
// will invok next, recover req.url
|
|
33
|
-
context.url = removed + context.url;
|
|
34
|
-
next();
|
|
35
|
-
});
|
|
36
|
-
} else {
|
|
37
|
-
return next();
|
|
15
|
+
const createStaticFileHandler = rules => // eslint-disable-next-line consistent-return
|
|
16
|
+
async (context, next) => {
|
|
17
|
+
const {
|
|
18
|
+
url: requestUrl,
|
|
19
|
+
req,
|
|
20
|
+
res
|
|
21
|
+
} = context;
|
|
22
|
+
const hitRule = rules.find(item => {
|
|
23
|
+
if ((0, _utils.isString)(item.path) && requestUrl.startsWith(item.path)) {
|
|
24
|
+
return true;
|
|
25
|
+
} else if ((0, _utils.isRegExp)(item.path) && item.path.test(requestUrl)) {
|
|
26
|
+
return true;
|
|
38
27
|
}
|
|
39
|
-
|
|
28
|
+
|
|
29
|
+
return false;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
if (hitRule) {
|
|
33
|
+
(0, _serveStatic.default)(hitRule.target)(req, res, () => {
|
|
34
|
+
next();
|
|
35
|
+
});
|
|
36
|
+
} else {
|
|
37
|
+
return next();
|
|
38
|
+
}
|
|
40
39
|
};
|
|
41
40
|
|
|
42
41
|
exports.createStaticFileHandler = createStaticFileHandler;
|
|
@@ -3,31 +3,26 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.WebModernDevServer = exports.APIModernDevServer = void 0;
|
|
7
7
|
|
|
8
8
|
var _devServer = require("./dev-server");
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class APIModernServer extends _modernServer.ModernServer {
|
|
13
|
-
prepareWebHandler(_) {
|
|
10
|
+
class WebModernDevServer extends _devServer.ModernDevServer {
|
|
11
|
+
prepareAPIHandler(_m, _) {
|
|
14
12
|
return null;
|
|
15
13
|
}
|
|
16
14
|
|
|
17
|
-
async
|
|
18
|
-
return super.
|
|
15
|
+
async prepareWebHandler(extension) {
|
|
16
|
+
return super.prepareWebHandler(extension);
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
filterRoutes(routes) {
|
|
22
|
-
return routes.filter(route => route.
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async preServerInit() {// noop
|
|
20
|
+
return routes.filter(route => route.entryName);
|
|
26
21
|
}
|
|
27
22
|
|
|
28
23
|
}
|
|
29
24
|
|
|
30
|
-
exports.
|
|
25
|
+
exports.WebModernDevServer = WebModernDevServer;
|
|
31
26
|
|
|
32
27
|
class APIModernDevServer extends _devServer.ModernDevServer {
|
|
33
28
|
prepareWebHandler(_) {
|
|
@@ -5,31 +5,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.ModernDevServer = void 0;
|
|
7
7
|
|
|
8
|
+
var _http = require("http");
|
|
9
|
+
|
|
8
10
|
var _path = _interopRequireDefault(require("path"));
|
|
9
11
|
|
|
12
|
+
var _https = require("https");
|
|
13
|
+
|
|
10
14
|
var _utils = require("@modern-js/utils");
|
|
11
15
|
|
|
12
16
|
var _webpackDevMiddleware = _interopRequireDefault(require("webpack-dev-middleware"));
|
|
13
17
|
|
|
14
|
-
var
|
|
18
|
+
var _modernServer = require("../modern-server");
|
|
15
19
|
|
|
16
|
-
var
|
|
20
|
+
var _mock = require("../../dev-tools/mock");
|
|
17
21
|
|
|
18
|
-
var
|
|
22
|
+
var _proxy = require("../../libs/proxy");
|
|
19
23
|
|
|
20
|
-
var
|
|
24
|
+
var _socketServer = _interopRequireDefault(require("../../dev-tools/socket-server"));
|
|
21
25
|
|
|
22
|
-
var
|
|
26
|
+
var _devServerPlugin = _interopRequireDefault(require("../../dev-tools/dev-server-plugin"));
|
|
23
27
|
|
|
24
|
-
var
|
|
28
|
+
var _launchEditor = require("../../dev-tools/launch-editor");
|
|
25
29
|
|
|
26
|
-
var
|
|
30
|
+
var _register = require("../../dev-tools/babel/register");
|
|
27
31
|
|
|
28
|
-
var
|
|
32
|
+
var reader = _interopRequireWildcard(require("../../libs/render/reader"));
|
|
29
33
|
|
|
30
|
-
var
|
|
34
|
+
var _watcher = _interopRequireDefault(require("../../dev-tools/watcher"));
|
|
31
35
|
|
|
32
|
-
var _constants = require("
|
|
36
|
+
var _constants = require("../../constants");
|
|
33
37
|
|
|
34
38
|
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); }
|
|
35
39
|
|
|
@@ -54,8 +58,8 @@ const DEFAULT_DEV_OPTIONS = {
|
|
|
54
58
|
};
|
|
55
59
|
|
|
56
60
|
class ModernDevServer extends _modernServer.ModernServer {
|
|
57
|
-
constructor(options
|
|
58
|
-
super(options
|
|
61
|
+
constructor(options) {
|
|
62
|
+
super(options); // set webpack compiler
|
|
59
63
|
|
|
60
64
|
this.devProxyHandler = null;
|
|
61
65
|
this.mockHandler = null;
|
|
@@ -67,18 +71,18 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
67
71
|
this.compiler = options.compiler; // set dev server options, like webpack-dev-server
|
|
68
72
|
|
|
69
73
|
this.dev = typeof options.dev === 'boolean' ? DEFAULT_DEV_OPTIONS : options.dev;
|
|
74
|
+
(0, _register.enableRegister)(this.pwd, this.conf);
|
|
70
75
|
} // Complete the preparation of services
|
|
71
76
|
|
|
72
77
|
|
|
73
|
-
async init() {
|
|
78
|
+
async init(runner) {
|
|
74
79
|
var _conf$tools, _conf$tools$devServer;
|
|
75
80
|
|
|
76
81
|
const {
|
|
77
82
|
conf,
|
|
78
83
|
pwd,
|
|
79
84
|
compiler
|
|
80
|
-
} = this;
|
|
81
|
-
(0, _register.enableRegister)(pwd, conf); // mock handler
|
|
85
|
+
} = this; // mock handler
|
|
82
86
|
|
|
83
87
|
this.mockHandler = (0, _mock.createMockHandler)({
|
|
84
88
|
pwd
|
|
@@ -113,7 +117,7 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
113
117
|
this.addHandler(devMiddlewareHandler);
|
|
114
118
|
}
|
|
115
119
|
|
|
116
|
-
await super.init(); // watch mock/ server/ api/ dir file change
|
|
120
|
+
await super.init(runner); // watch mock/ server/ api/ dir file change
|
|
117
121
|
|
|
118
122
|
this.startWatcher();
|
|
119
123
|
}
|
|
@@ -124,6 +128,7 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
124
128
|
this.cleanSSRCache(); // reset static file
|
|
125
129
|
|
|
126
130
|
reader.updateFile();
|
|
131
|
+
this.runner.reset();
|
|
127
132
|
}
|
|
128
133
|
|
|
129
134
|
onListening(app) {
|
|
@@ -140,6 +145,24 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
140
145
|
resolve();
|
|
141
146
|
});
|
|
142
147
|
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async createHTTPServer(handler) {
|
|
151
|
+
const {
|
|
152
|
+
dev
|
|
153
|
+
} = this;
|
|
154
|
+
const devHttpsOption = typeof dev === 'object' && dev.https;
|
|
155
|
+
|
|
156
|
+
if (devHttpsOption) {
|
|
157
|
+
const {
|
|
158
|
+
genHttpsOptions
|
|
159
|
+
} = require("../../dev-tools/https");
|
|
160
|
+
|
|
161
|
+
const httpsOptions = await genHttpsOptions(devHttpsOption);
|
|
162
|
+
return (0, _https.createServer)(httpsOptions, handler);
|
|
163
|
+
} else {
|
|
164
|
+
return (0, _http.createServer)(handler);
|
|
165
|
+
}
|
|
143
166
|
} // set up plugin to each compiler
|
|
144
167
|
// register hooks for each compilation, update socket stats if recompiled
|
|
145
168
|
// start dev middleware
|
|
@@ -234,18 +257,16 @@ class ModernDevServer extends _modernServer.ModernServer {
|
|
|
234
257
|
pwd
|
|
235
258
|
} = this;
|
|
236
259
|
const {
|
|
237
|
-
mock
|
|
238
|
-
server,
|
|
239
|
-
api,
|
|
240
|
-
shared
|
|
260
|
+
mock
|
|
241
261
|
} = _constants.AGGRED_DIR;
|
|
242
|
-
const defaultWatched = [`${pwd}/${mock}/**/*`, `${pwd}/${
|
|
262
|
+
const defaultWatched = [`${pwd}/${mock}/**/*`, `${pwd}/${_utils.SERVER_DIR}/**/*`, `${pwd}/${_utils.API_DIR}/**/*`, `${pwd}/${_utils.SHARED_DIR}/**/*`];
|
|
243
263
|
const watcher = new _watcher.default();
|
|
244
264
|
watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
|
|
245
265
|
|
|
246
266
|
watcher.listen(defaultWatched, filepath => {
|
|
247
267
|
watcher.updateDepTree();
|
|
248
268
|
watcher.cleanDepCache(filepath);
|
|
269
|
+
this.runner.reset();
|
|
249
270
|
|
|
250
271
|
if (filepath.startsWith(`${pwd}/${mock}`)) {
|
|
251
272
|
this.mockHandler = (0, _mock.createMockHandler)({
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "APIModernDevServer", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _devServerSplit.APIModernDevServer;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "ModernDevServer", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _devServer.ModernDevServer;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "WebModernDevServer", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _devServerSplit.WebModernDevServer;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
var _devServerSplit = require("./dev-server-split");
|
|
26
|
+
|
|
27
|
+
var _devServer = require("./dev-server");
|