@modern-js/server 2.0.0-beta.3 → 2.0.0-beta.4
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 +79 -0
- package/dist/js/modern/constants.js +10 -9
- package/dist/js/modern/dev-tools/dev-middleware/dev-server-plugin.js +14 -20
- package/dist/js/modern/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +14 -19
- package/dist/js/modern/dev-tools/dev-middleware/hmr-client/index.js +134 -184
- package/dist/js/modern/dev-tools/dev-middleware/hmr-client/types.d.js +0 -0
- package/dist/js/modern/dev-tools/dev-middleware/index.js +65 -60
- package/dist/js/modern/dev-tools/dev-middleware/socket-server.js +33 -59
- package/dist/js/modern/dev-tools/https/global.d.js +0 -0
- package/dist/js/modern/dev-tools/https/index.js +28 -5
- package/dist/js/modern/dev-tools/mock/getMockData.js +71 -45
- package/dist/js/modern/dev-tools/mock/index.js +34 -15
- package/dist/js/modern/dev-tools/register/index.js +71 -54
- package/dist/js/modern/dev-tools/watcher/dependency-tree.js +25 -34
- package/dist/js/modern/dev-tools/watcher/index.js +51 -33
- package/dist/js/modern/dev-tools/watcher/stats-cache.js +13 -20
- package/dist/js/modern/index.js +7 -4
- package/dist/js/modern/server/dev-server.js +191 -215
- package/dist/js/modern/server/index.js +7 -4
- package/dist/js/node/constants.js +27 -14
- package/dist/js/node/dev-tools/dev-middleware/dev-server-plugin.js +36 -24
- package/dist/js/node/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +31 -24
- package/dist/js/node/dev-tools/dev-middleware/hmr-client/index.js +56 -98
- package/dist/js/node/dev-tools/dev-middleware/hmr-client/types.d.js +0 -0
- package/dist/js/node/dev-tools/dev-middleware/index.js +94 -72
- package/dist/js/node/dev-tools/dev-middleware/socket-server.js +57 -66
- package/dist/js/node/dev-tools/https/global.d.js +0 -0
- package/dist/js/node/dev-tools/https/index.js +52 -13
- package/dist/js/node/dev-tools/mock/getMockData.js +88 -51
- package/dist/js/node/dev-tools/mock/index.js +62 -28
- package/dist/js/node/dev-tools/register/index.js +98 -64
- package/dist/js/node/dev-tools/watcher/dependency-tree.js +50 -43
- package/dist/js/node/dev-tools/watcher/index.js +79 -47
- package/dist/js/node/dev-tools/watcher/stats-cache.js +40 -30
- package/dist/js/node/index.js +25 -15
- package/dist/js/node/server/dev-server.js +234 -237
- package/dist/js/node/server/index.js +26 -11
- package/dist/js/treeshaking/constants.js +21 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/dev-server-plugin.js +74 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +51 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/hmr-client/index.js +157 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/hmr-client/types.d.js +1 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/index.js +363 -0
- package/dist/js/treeshaking/dev-tools/dev-middleware/socket-server.js +209 -0
- package/dist/js/treeshaking/dev-tools/https/global.d.js +1 -0
- package/dist/js/treeshaking/dev-tools/https/index.js +161 -0
- package/dist/js/treeshaking/dev-tools/mock/getMockData.js +327 -0
- package/dist/js/treeshaking/dev-tools/mock/index.js +191 -0
- package/dist/js/treeshaking/dev-tools/register/index.js +153 -0
- package/dist/js/treeshaking/dev-tools/watcher/dependency-tree.js +150 -0
- package/dist/js/treeshaking/dev-tools/watcher/index.js +200 -0
- package/dist/js/treeshaking/dev-tools/watcher/stats-cache.js +128 -0
- package/dist/js/treeshaking/index.js +9 -0
- package/dist/js/treeshaking/server/dev-server.js +800 -0
- package/dist/js/treeshaking/server/index.js +92 -0
- package/dist/js/treeshaking/types.js +1 -0
- package/dist/types/dev-tools/mock/getMockData.d.ts +2 -0
- package/dist/types/dev-tools/watcher/dependency-tree.d.ts +2 -0
- package/dist/types/dev-tools/watcher/index.d.ts +1 -1
- package/dist/types/index.d.ts +2 -0
- package/package.json +16 -13
- package/temp-fix-hmr.js +483 -0
|
@@ -1,32 +1,71 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __reflectGet = Reflect.get;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __spreadValues = (a, b) => {
|
|
11
|
+
for (var prop in b || (b = {}))
|
|
12
|
+
if (__hasOwnProp.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
if (__getOwnPropSymbols)
|
|
15
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
+
if (__propIsEnum.call(b, prop))
|
|
17
|
+
__defNormalProp(a, prop, b[prop]);
|
|
18
|
+
}
|
|
19
|
+
return a;
|
|
20
|
+
};
|
|
21
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
|
+
var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
|
|
23
|
+
var __async = (__this, __arguments, generator) => {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
var fulfilled = (value) => {
|
|
26
|
+
try {
|
|
27
|
+
step(generator.next(value));
|
|
28
|
+
} catch (e) {
|
|
29
|
+
reject(e);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var rejected = (value) => {
|
|
33
|
+
try {
|
|
34
|
+
step(generator.throw(value));
|
|
35
|
+
} catch (e) {
|
|
36
|
+
reject(e);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
40
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
import { createServer } from "http";
|
|
44
|
+
import path from "path";
|
|
45
|
+
import { createServer as createHttpsServer } from "https";
|
|
46
|
+
import {
|
|
47
|
+
API_DIR,
|
|
48
|
+
LOADER_ROUTES_DIR,
|
|
49
|
+
SERVER_DIR,
|
|
50
|
+
SHARED_DIR
|
|
51
|
+
} from "@modern-js/utils";
|
|
52
|
+
import {
|
|
53
|
+
createProxyHandler,
|
|
54
|
+
ModernServer,
|
|
55
|
+
AGGRED_DIR
|
|
56
|
+
} from "@modern-js/prod-server";
|
|
57
|
+
import { LOADABLE_STATS_FILE } from "@modern-js/utils/constants";
|
|
10
58
|
import { getDefaultDevOptions } from "../constants";
|
|
11
59
|
import { createMockHandler } from "../dev-tools/mock";
|
|
12
60
|
import { enableRegister } from "../dev-tools/register";
|
|
13
61
|
import Watcher, { mergeWatchOptions } from "../dev-tools/watcher";
|
|
14
62
|
import DevMiddleware from "../dev-tools/dev-middleware";
|
|
15
|
-
|
|
63
|
+
class ModernDevServer extends ModernServer {
|
|
16
64
|
constructor(options) {
|
|
17
65
|
super(options);
|
|
18
|
-
|
|
19
|
-
// dev server should work in pwd
|
|
20
|
-
_defineProperty(this, "mockHandler", null);
|
|
21
|
-
_defineProperty(this, "dev", void 0);
|
|
22
|
-
_defineProperty(this, "devMiddleware", void 0);
|
|
23
|
-
_defineProperty(this, "watcher", void 0);
|
|
66
|
+
this.mockHandler = null;
|
|
24
67
|
this.workDir = this.pwd;
|
|
25
|
-
|
|
26
|
-
// set dev server options, like webpack-dev-server
|
|
27
68
|
this.dev = this.getDevOptions(options);
|
|
28
|
-
|
|
29
|
-
// create dev middleware instance
|
|
30
69
|
this.devMiddleware = new DevMiddleware({
|
|
31
70
|
dev: this.dev,
|
|
32
71
|
compiler: options.compiler,
|
|
@@ -35,19 +74,16 @@ export class ModernDevServer extends ModernServer {
|
|
|
35
74
|
enableRegister(this.pwd, this.conf);
|
|
36
75
|
}
|
|
37
76
|
getDevOptions(options) {
|
|
38
|
-
const devOptions = typeof options.dev ===
|
|
77
|
+
const devOptions = typeof options.dev === "boolean" ? {} : options.dev;
|
|
39
78
|
const defaultOptions = getDefaultDevOptions();
|
|
40
|
-
return
|
|
41
|
-
client:
|
|
79
|
+
return __spreadProps(__spreadValues(__spreadValues({}, defaultOptions), devOptions), {
|
|
80
|
+
client: __spreadValues(__spreadValues({}, defaultOptions.client), devOptions == null ? void 0 : devOptions.client)
|
|
42
81
|
});
|
|
43
82
|
}
|
|
44
83
|
addMiddlewareHandler(handlers) {
|
|
45
|
-
handlers.forEach(handler => {
|
|
84
|
+
handlers.forEach((handler) => {
|
|
46
85
|
this.addHandler((ctx, next) => {
|
|
47
|
-
const {
|
|
48
|
-
req,
|
|
49
|
-
res
|
|
50
|
-
} = ctx;
|
|
86
|
+
const { req, res } = ctx;
|
|
51
87
|
return handler(req, res, next);
|
|
52
88
|
});
|
|
53
89
|
});
|
|
@@ -59,186 +95,132 @@ export class ModernDevServer extends ModernServer {
|
|
|
59
95
|
};
|
|
60
96
|
const befores = [];
|
|
61
97
|
const afters = [];
|
|
62
|
-
setupMiddlewares.forEach(handler => {
|
|
63
|
-
handler(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
98
|
+
setupMiddlewares.forEach((handler) => {
|
|
99
|
+
handler(
|
|
100
|
+
{
|
|
101
|
+
unshift: (...handlers) => befores.unshift(...handlers),
|
|
102
|
+
push: (...handlers) => afters.push(...handlers)
|
|
103
|
+
},
|
|
104
|
+
serverOptions
|
|
105
|
+
);
|
|
67
106
|
});
|
|
68
|
-
return {
|
|
69
|
-
befores,
|
|
70
|
-
afters
|
|
71
|
-
};
|
|
107
|
+
return { befores, afters };
|
|
72
108
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
await this.applyDefaultMiddlewares(app);
|
|
91
|
-
|
|
92
|
-
// after dev handler
|
|
93
|
-
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
94
|
-
this.addMiddlewareHandler([...afters, ...afterHandlers]);
|
|
95
|
-
await super.onInit(runner, app);
|
|
96
|
-
|
|
97
|
-
// watch mock/ server/ api/ dir file change
|
|
98
|
-
if (dev.watch) {
|
|
99
|
-
this.startWatcher();
|
|
100
|
-
app.on('close', async () => {
|
|
101
|
-
var _this$watcher;
|
|
102
|
-
await ((_this$watcher = this.watcher) === null || _this$watcher === void 0 ? void 0 : _this$watcher.close());
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
async applyDefaultMiddlewares(app) {
|
|
107
|
-
const {
|
|
108
|
-
pwd,
|
|
109
|
-
dev,
|
|
110
|
-
devMiddleware
|
|
111
|
-
} = this;
|
|
112
|
-
this.addHandler((ctx, next) => {
|
|
113
|
-
// allow hmr request cross-domain, because the user may use global proxy
|
|
114
|
-
ctx.res.setHeader('Access-Control-Allow-Origin', '*');
|
|
115
|
-
if (ctx.path.includes('hot-update')) {
|
|
116
|
-
ctx.res.setHeader('Access-Control-Allow-Credentials', 'false');
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// 用户在 devServer 上配置的 headers 不会对 html 的请求生效,加入下面代码,使配置的 headers 对所有请求生效
|
|
120
|
-
const confHeaders = dev.headers;
|
|
121
|
-
if (confHeaders) {
|
|
122
|
-
for (const [key, value] of Object.entries(confHeaders)) {
|
|
123
|
-
ctx.res.setHeader(key, value);
|
|
124
|
-
}
|
|
109
|
+
onInit(runner, app) {
|
|
110
|
+
return __async(this, null, function* () {
|
|
111
|
+
this.runner = runner;
|
|
112
|
+
const { dev } = this;
|
|
113
|
+
const { befores, afters } = this.applySetupMiddlewares();
|
|
114
|
+
const beforeHandlers = yield this.setupBeforeDevMiddleware();
|
|
115
|
+
this.addMiddlewareHandler([...beforeHandlers, ...befores]);
|
|
116
|
+
yield this.applyDefaultMiddlewares(app);
|
|
117
|
+
const afterHandlers = yield this.setupAfterDevMiddleware();
|
|
118
|
+
this.addMiddlewareHandler([...afters, ...afterHandlers]);
|
|
119
|
+
yield __superGet(ModernDevServer.prototype, this, "onInit").call(this, runner, app);
|
|
120
|
+
if (dev.watch) {
|
|
121
|
+
this.startWatcher();
|
|
122
|
+
app.on("close", () => __async(this, null, function* () {
|
|
123
|
+
var _a;
|
|
124
|
+
yield (_a = this.watcher) == null ? void 0 : _a.close();
|
|
125
|
+
}));
|
|
125
126
|
}
|
|
126
|
-
next();
|
|
127
127
|
});
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
this
|
|
131
|
-
pwd
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
}
|
|
129
|
+
applyDefaultMiddlewares(app) {
|
|
130
|
+
return __async(this, null, function* () {
|
|
131
|
+
const { pwd, dev, devMiddleware } = this;
|
|
132
|
+
this.addHandler((ctx, next) => {
|
|
133
|
+
ctx.res.setHeader("Access-Control-Allow-Origin", "*");
|
|
134
|
+
if (ctx.path.includes("hot-update")) {
|
|
135
|
+
ctx.res.setHeader("Access-Control-Allow-Credentials", "false");
|
|
136
|
+
}
|
|
137
|
+
const confHeaders = dev.headers;
|
|
138
|
+
if (confHeaders) {
|
|
139
|
+
for (const [key, value] of Object.entries(confHeaders)) {
|
|
140
|
+
ctx.res.setHeader(key, value);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
137
143
|
next();
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
// dev proxy handler, each proxy has own handler
|
|
142
|
-
const proxyHandlers = createProxyHandler(dev.proxy);
|
|
143
|
-
if (proxyHandlers) {
|
|
144
|
-
proxyHandlers.forEach(handler => {
|
|
145
|
-
this.addHandler(handler);
|
|
146
144
|
});
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
145
|
+
this.mockHandler = createMockHandler({ pwd });
|
|
146
|
+
this.addHandler((ctx, next) => {
|
|
147
|
+
if (this.mockHandler) {
|
|
148
|
+
this.mockHandler(ctx, next);
|
|
149
|
+
} else {
|
|
150
|
+
next();
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
const proxyHandlers = createProxyHandler(dev.proxy);
|
|
154
|
+
if (proxyHandlers) {
|
|
155
|
+
proxyHandlers.forEach((handler) => {
|
|
156
|
+
this.addHandler(handler);
|
|
158
157
|
});
|
|
159
158
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
159
|
+
devMiddleware.init(app);
|
|
160
|
+
devMiddleware.on("change", (stats) => {
|
|
161
|
+
if (stats.toJson({ all: false }).name === "client") {
|
|
162
|
+
this.onRepack({ routes: this.getRoutes() });
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
this.addHandler((ctx, next) => {
|
|
166
|
+
const { req, res } = ctx;
|
|
167
|
+
if (devMiddleware.middleware) {
|
|
168
|
+
devMiddleware.middleware(req, res, next);
|
|
169
|
+
} else {
|
|
170
|
+
next();
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
if (dev.historyApiFallback) {
|
|
174
|
+
const { default: connectHistoryApiFallback } = yield import("connect-history-api-fallback");
|
|
175
|
+
const historyApiFallbackMiddleware = connectHistoryApiFallback(
|
|
176
|
+
typeof dev.historyApiFallback === "boolean" ? {} : dev.historyApiFallback
|
|
177
|
+
);
|
|
178
|
+
this.addHandler(
|
|
179
|
+
(ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next)
|
|
180
|
+
);
|
|
170
181
|
}
|
|
171
182
|
});
|
|
172
|
-
if (dev.historyApiFallback) {
|
|
173
|
-
const {
|
|
174
|
-
default: connectHistoryApiFallback
|
|
175
|
-
} = await import('connect-history-api-fallback');
|
|
176
|
-
const historyApiFallbackMiddleware = connectHistoryApiFallback(typeof dev.historyApiFallback === 'boolean' ? {} : dev.historyApiFallback);
|
|
177
|
-
this.addHandler((ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next));
|
|
178
|
-
}
|
|
179
183
|
}
|
|
180
184
|
onRepack(options = {}) {
|
|
181
|
-
// reset the routing management instance every times the service starts
|
|
182
185
|
if (Array.isArray(options.routes)) {
|
|
183
186
|
this.router.reset(this.filterRoutes(options.routes));
|
|
184
187
|
}
|
|
185
|
-
|
|
186
|
-
// clean ssr bundle cache
|
|
187
188
|
this.cleanSSRCache();
|
|
188
|
-
|
|
189
|
-
// reset static file
|
|
190
189
|
this.reader.updateFile();
|
|
191
190
|
super.onRepack(options);
|
|
192
191
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
dev
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
-
return createServer(handler);
|
|
206
|
-
}
|
|
192
|
+
createHTTPServer(handler) {
|
|
193
|
+
return __async(this, null, function* () {
|
|
194
|
+
const { dev } = this;
|
|
195
|
+
const devHttpsOption = typeof dev === "object" && dev.https;
|
|
196
|
+
if (devHttpsOption) {
|
|
197
|
+
const { genHttpsOptions } = require("../dev-tools/https");
|
|
198
|
+
const httpsOptions = yield genHttpsOptions(devHttpsOption);
|
|
199
|
+
return createHttpsServer(httpsOptions, handler);
|
|
200
|
+
} else {
|
|
201
|
+
return createServer(handler);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
207
204
|
}
|
|
208
205
|
warmupSSRBundle() {
|
|
209
|
-
// not warmup ssr bundle on development
|
|
210
206
|
}
|
|
211
207
|
onServerChange({
|
|
212
208
|
filepath,
|
|
213
209
|
event
|
|
214
210
|
}) {
|
|
215
|
-
const {
|
|
216
|
-
|
|
217
|
-
} = this;
|
|
218
|
-
const {
|
|
219
|
-
mock
|
|
220
|
-
} = AGGRED_DIR;
|
|
211
|
+
const { pwd } = this;
|
|
212
|
+
const { mock } = AGGRED_DIR;
|
|
221
213
|
const mockPath = path.normalize(path.join(pwd, mock));
|
|
222
214
|
this.runner.reset();
|
|
223
215
|
if (filepath.startsWith(mockPath)) {
|
|
224
|
-
this.mockHandler = createMockHandler({
|
|
225
|
-
pwd
|
|
226
|
-
});
|
|
216
|
+
this.mockHandler = createMockHandler({ pwd });
|
|
227
217
|
} else {
|
|
228
218
|
try {
|
|
229
|
-
const success = this.runner.onApiChange([
|
|
230
|
-
filename: filepath,
|
|
231
|
-
|
|
232
|
-
}]);
|
|
233
|
-
|
|
234
|
-
// onApiChange 钩子被调用,且返回 true,则表示无需重新编译
|
|
235
|
-
// onApiChange 的类型是 WaterFall,WaterFall 钩子的返回值类型目前有问题
|
|
236
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
237
|
-
// @ts-expect-error
|
|
219
|
+
const success = this.runner.onApiChange([
|
|
220
|
+
{ filename: filepath, event }
|
|
221
|
+
]);
|
|
238
222
|
if (success !== true) {
|
|
239
|
-
super.onServerChange({
|
|
240
|
-
filepath
|
|
241
|
-
});
|
|
223
|
+
super.onServerChange({ filepath });
|
|
242
224
|
}
|
|
243
225
|
} catch (e) {
|
|
244
226
|
this.logger.error(e);
|
|
@@ -246,36 +228,28 @@ export class ModernDevServer extends ModernServer {
|
|
|
246
228
|
}
|
|
247
229
|
}
|
|
248
230
|
createContext(req, res) {
|
|
249
|
-
return super.createContext(req, res, {
|
|
250
|
-
etag: true
|
|
251
|
-
});
|
|
231
|
+
return super.createContext(req, res, { etag: true });
|
|
252
232
|
}
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
runner,
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
const pluginMids = await runner.beforeDevServer(conf);
|
|
261
|
-
return [...setupMids, ...pluginMids].flat();
|
|
233
|
+
setupBeforeDevMiddleware() {
|
|
234
|
+
return __async(this, null, function* () {
|
|
235
|
+
const { runner, conf, dev } = this;
|
|
236
|
+
const setupMids = dev.before || [];
|
|
237
|
+
const pluginMids = yield runner.beforeDevServer(conf);
|
|
238
|
+
return [...setupMids, ...pluginMids].flat();
|
|
239
|
+
});
|
|
262
240
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
runner,
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
const pluginMids = await runner.afterDevServer(conf);
|
|
271
|
-
return [...pluginMids, ...setupMids].flat();
|
|
241
|
+
setupAfterDevMiddleware() {
|
|
242
|
+
return __async(this, null, function* () {
|
|
243
|
+
const { runner, conf, dev } = this;
|
|
244
|
+
const setupMids = dev.after || [];
|
|
245
|
+
const pluginMids = yield runner.afterDevServer(conf);
|
|
246
|
+
return [...pluginMids, ...setupMids].flat();
|
|
247
|
+
});
|
|
272
248
|
}
|
|
273
249
|
cleanSSRCache() {
|
|
274
|
-
const {
|
|
275
|
-
distDir
|
|
276
|
-
} = this;
|
|
250
|
+
const { distDir } = this;
|
|
277
251
|
const bundles = this.router.getBundles();
|
|
278
|
-
bundles.forEach(bundle => {
|
|
252
|
+
bundles.forEach((bundle) => {
|
|
279
253
|
const filepath = path.join(distDir, bundle);
|
|
280
254
|
if (require.cache[filepath]) {
|
|
281
255
|
delete require.cache[filepath];
|
|
@@ -287,24 +261,23 @@ export class ModernDevServer extends ModernServer {
|
|
|
287
261
|
}
|
|
288
262
|
}
|
|
289
263
|
startWatcher() {
|
|
290
|
-
var
|
|
291
|
-
const {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
const
|
|
264
|
+
var _a;
|
|
265
|
+
const { pwd, distDir } = this;
|
|
266
|
+
const { mock } = AGGRED_DIR;
|
|
267
|
+
const defaultWatched = [
|
|
268
|
+
`${mock}/**/*`,
|
|
269
|
+
`${SERVER_DIR}/**/*`,
|
|
270
|
+
`${API_DIR}/**`,
|
|
271
|
+
`${SHARED_DIR}/**/*`,
|
|
272
|
+
`${distDir}/${LOADER_ROUTES_DIR}/**`
|
|
273
|
+
];
|
|
274
|
+
const watchOptions = mergeWatchOptions((_a = this.conf.server) == null ? void 0 : _a.watchOptions);
|
|
275
|
+
const defaultWatchedPaths = defaultWatched.map((p) => {
|
|
301
276
|
const finalPath = path.isAbsolute(p) ? p : path.join(pwd, p);
|
|
302
277
|
return path.normalize(finalPath);
|
|
303
278
|
});
|
|
304
279
|
const watcher = new Watcher();
|
|
305
280
|
watcher.createDepTree();
|
|
306
|
-
|
|
307
|
-
// 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
|
|
308
281
|
watcher.listen(defaultWatchedPaths, watchOptions, (filepath, event) => {
|
|
309
282
|
watcher.updateDepTree();
|
|
310
283
|
watcher.cleanDepCache(filepath);
|
|
@@ -315,4 +288,7 @@ export class ModernDevServer extends ModernServer {
|
|
|
315
288
|
});
|
|
316
289
|
this.watcher = watcher;
|
|
317
290
|
}
|
|
318
|
-
}
|
|
291
|
+
}
|
|
292
|
+
export {
|
|
293
|
+
ModernDevServer
|
|
294
|
+
};
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { Server } from
|
|
1
|
+
import { Server } from "@modern-js/prod-server";
|
|
2
2
|
import { ModernDevServer } from "./dev-server";
|
|
3
|
-
const createDevServer = options => {
|
|
3
|
+
const createDevServer = (options) => {
|
|
4
4
|
return new ModernDevServer(options);
|
|
5
5
|
};
|
|
6
|
-
|
|
6
|
+
class DevServer extends Server {
|
|
7
7
|
constructor(options) {
|
|
8
8
|
super(options);
|
|
9
9
|
if (options.dev) {
|
|
10
10
|
this.serverImpl = createDevServer;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
-
}
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
DevServer
|
|
16
|
+
};
|
|
@@ -1,25 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var stdin_exports = {};
|
|
19
|
+
__export(stdin_exports, {
|
|
20
|
+
getDefaultDevOptions: () => getDefaultDevOptions
|
|
5
21
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
22
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
23
|
+
var import_utils = require("@modern-js/utils");
|
|
8
24
|
const getDefaultDevOptions = () => {
|
|
9
|
-
const network = (0,
|
|
25
|
+
const network = (0, import_utils.getIpv4Interfaces)().find((item) => !item.internal);
|
|
10
26
|
return {
|
|
11
27
|
client: {
|
|
12
|
-
port:
|
|
13
|
-
path:
|
|
14
|
-
host: (network
|
|
28
|
+
port: "8080",
|
|
29
|
+
path: import_utils.HMR_SOCK_PATH,
|
|
30
|
+
host: (network == null ? void 0 : network.address) || "localhost"
|
|
15
31
|
},
|
|
16
32
|
https: false,
|
|
17
|
-
devMiddleware: {
|
|
18
|
-
writeToDisk: true
|
|
19
|
-
},
|
|
33
|
+
devMiddleware: { writeToDisk: true },
|
|
20
34
|
watch: true,
|
|
21
35
|
hot: true,
|
|
22
36
|
liveReload: true
|
|
23
37
|
};
|
|
24
38
|
};
|
|
25
|
-
exports.getDefaultDevOptions = getDefaultDevOptions;
|
|
@@ -1,45 +1,57 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var stdin_exports = {};
|
|
25
|
+
__export(stdin_exports, {
|
|
26
|
+
default: () => DevServerPlugin
|
|
5
27
|
});
|
|
6
|
-
exports
|
|
7
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
28
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
8
29
|
class DevServerPlugin {
|
|
9
30
|
constructor(options) {
|
|
10
|
-
_defineProperty(this, "options", void 0);
|
|
11
31
|
this.options = options;
|
|
12
32
|
}
|
|
13
33
|
injectHMRClient(compiler) {
|
|
14
|
-
const {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
const path = client !== null && client !== void 0 && client.path ? `&path=${client.path}` : '';
|
|
19
|
-
const port = client !== null && client !== void 0 && client.port ? `&port=${client.port}` : '';
|
|
34
|
+
const { client } = this.options;
|
|
35
|
+
const host = (client == null ? void 0 : client.host) ? `&host=${client.host}` : "";
|
|
36
|
+
const path = (client == null ? void 0 : client.path) ? `&path=${client.path}` : "";
|
|
37
|
+
const port = (client == null ? void 0 : client.port) ? `&port=${client.port}` : "";
|
|
20
38
|
const clientEntry = `${require.resolve("./hmr-client")}?${host}${path}${port}`;
|
|
21
|
-
|
|
22
|
-
// use a hook to add entries if available
|
|
23
39
|
new compiler.webpack.EntryPlugin(compiler.context, clientEntry, {
|
|
24
|
-
name:
|
|
40
|
+
name: void 0
|
|
25
41
|
}).apply(compiler);
|
|
26
42
|
}
|
|
27
43
|
apply(compiler) {
|
|
28
44
|
if (this.options.hot || this.options.liveReload) {
|
|
29
45
|
this.injectHMRClient(compiler);
|
|
30
46
|
}
|
|
31
|
-
|
|
32
|
-
// Todo remove, client must inject.
|
|
33
47
|
const compilerOptions = compiler.options;
|
|
34
|
-
const {
|
|
35
|
-
HotModuleReplacementPlugin
|
|
36
|
-
} = compiler.webpack;
|
|
48
|
+
const { HotModuleReplacementPlugin } = compiler.webpack;
|
|
37
49
|
compilerOptions.plugins = compilerOptions.plugins || [];
|
|
38
|
-
if (!compilerOptions.plugins.find(
|
|
39
|
-
|
|
50
|
+
if (!compilerOptions.plugins.find(
|
|
51
|
+
(p) => p.constructor === HotModuleReplacementPlugin
|
|
52
|
+
)) {
|
|
40
53
|
const plugin = new HotModuleReplacementPlugin();
|
|
41
54
|
plugin.apply(compiler);
|
|
42
55
|
}
|
|
43
56
|
}
|
|
44
57
|
}
|
|
45
|
-
exports.default = DevServerPlugin;
|