@modern-js/prod-server 2.0.0-beta.0 → 2.0.0-beta.2
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 +110 -0
- package/dist/js/modern/constants.js +0 -2
- package/dist/js/modern/index.js +0 -1
- package/dist/js/modern/libs/context/context.js +10 -56
- package/dist/js/modern/libs/hook-api/index.js +0 -31
- package/dist/js/modern/libs/hook-api/route.js +0 -8
- package/dist/js/modern/libs/hook-api/template.js +0 -16
- package/dist/js/modern/libs/loadConfig.js +3 -10
- package/dist/js/modern/libs/metrics.js +6 -6
- package/dist/js/modern/libs/proxy.js +7 -12
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -1
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -9
- package/dist/js/modern/libs/render/cache/index.js +8 -16
- package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -10
- package/dist/js/modern/libs/render/cache/spr.js +12 -62
- package/dist/js/modern/libs/render/cache/util.js +0 -6
- package/dist/js/modern/libs/render/index.js +6 -11
- package/dist/js/modern/libs/render/measure.js +1 -11
- package/dist/js/modern/libs/render/modern/index.js +2 -13
- package/dist/js/modern/libs/render/reader.js +13 -24
- package/dist/js/modern/libs/render/ssr.js +5 -6
- package/dist/js/modern/libs/render/static.js +6 -9
- package/dist/js/modern/libs/render/type.js +0 -1
- package/dist/js/modern/libs/route/index.js +8 -19
- package/dist/js/modern/libs/route/matcher.js +21 -29
- package/dist/js/modern/libs/route/route.js +0 -13
- package/dist/js/modern/libs/serve-file.js +5 -6
- package/dist/js/modern/server/index.js +25 -52
- package/dist/js/modern/server/modern-server-split.js +0 -11
- package/dist/js/modern/server/modern-server.js +87 -167
- package/dist/js/modern/utils.js +12 -27
- package/dist/js/modern/worker-server.js +34 -0
- package/dist/js/node/constants.js +0 -2
- package/dist/js/node/index.js +0 -10
- package/dist/js/node/libs/context/context.js +10 -65
- package/dist/js/node/libs/context/index.js +0 -3
- package/dist/js/node/libs/hook-api/index.js +0 -42
- package/dist/js/node/libs/hook-api/route.js +0 -10
- package/dist/js/node/libs/hook-api/template.js +0 -22
- package/dist/js/node/libs/loadConfig.js +3 -22
- package/dist/js/node/libs/metrics.js +6 -6
- package/dist/js/node/libs/proxy.js +7 -17
- package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -5
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -12
- package/dist/js/node/libs/render/cache/index.js +8 -22
- package/dist/js/node/libs/render/cache/page-caches/index.js +0 -2
- package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -14
- package/dist/js/node/libs/render/cache/spr.js +12 -71
- package/dist/js/node/libs/render/cache/util.js +0 -18
- package/dist/js/node/libs/render/index.js +6 -26
- package/dist/js/node/libs/render/measure.js +0 -17
- package/dist/js/node/libs/render/modern/index.js +2 -20
- package/dist/js/node/libs/render/reader.js +12 -39
- package/dist/js/node/libs/render/ssr.js +4 -16
- package/dist/js/node/libs/render/static.js +6 -18
- package/dist/js/node/libs/render/type.js +0 -1
- package/dist/js/node/libs/route/index.js +8 -22
- package/dist/js/node/libs/route/matcher.js +18 -34
- package/dist/js/node/libs/route/route.js +0 -15
- package/dist/js/node/libs/serve-file.js +5 -13
- package/dist/js/node/server/index.js +25 -72
- package/dist/js/node/server/modern-server-split.js +0 -13
- package/dist/js/node/server/modern-server.js +87 -196
- package/dist/js/node/utils.js +13 -52
- package/dist/js/node/worker-server.js +41 -0
- package/dist/js/treeshaking/constants.js +28 -0
- package/dist/js/treeshaking/index.js +13 -0
- package/dist/js/treeshaking/libs/context/context.js +243 -0
- package/dist/js/treeshaking/libs/context/index.js +5 -0
- package/dist/js/treeshaking/libs/hook-api/index.js +157 -0
- package/dist/js/treeshaking/libs/hook-api/route.js +33 -0
- package/dist/js/treeshaking/libs/hook-api/template.js +91 -0
- package/dist/js/treeshaking/libs/loadConfig.js +39 -0
- package/dist/js/treeshaking/libs/metrics.js +12 -0
- package/dist/js/treeshaking/libs/proxy.js +80 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +124 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +464 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +53 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +35 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +121 -0
- package/dist/js/treeshaking/libs/render/cache/index.js +184 -0
- package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +30 -0
- package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +46 -0
- package/dist/js/treeshaking/libs/render/cache/spr.js +362 -0
- package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
- package/dist/js/treeshaking/libs/render/cache/util.js +101 -0
- package/dist/js/treeshaking/libs/render/index.js +100 -0
- package/dist/js/treeshaking/libs/render/measure.js +61 -0
- package/dist/js/treeshaking/libs/render/modern/browser-list.js +7 -0
- package/dist/js/treeshaking/libs/render/modern/index.js +39 -0
- package/dist/js/treeshaking/libs/render/reader.js +191 -0
- package/dist/js/treeshaking/libs/render/ssr.js +98 -0
- package/dist/js/treeshaking/libs/render/static.js +84 -0
- package/dist/js/treeshaking/libs/render/type.js +6 -0
- package/dist/js/treeshaking/libs/route/index.js +94 -0
- package/dist/js/treeshaking/libs/route/matcher.js +113 -0
- package/dist/js/treeshaking/libs/route/route.js +26 -0
- package/dist/js/treeshaking/libs/serve-file.js +75 -0
- package/dist/js/treeshaking/server/index.js +339 -0
- package/dist/js/treeshaking/server/modern-server-split.js +152 -0
- package/dist/js/treeshaking/server/modern-server.js +946 -0
- package/dist/js/treeshaking/type.js +1 -0
- package/dist/js/treeshaking/utils.js +90 -0
- package/dist/js/treeshaking/worker-server.js +56 -0
- package/dist/types/index.d.ts +0 -2
- package/dist/types/libs/context/context.d.ts +0 -3
- package/dist/types/libs/loadConfig.d.ts +0 -1
- package/dist/types/libs/render/cache/index.d.ts +0 -2
- package/dist/types/libs/render/cache/spr.d.ts +0 -2
- package/dist/types/server/index.d.ts +0 -3
- package/dist/types/utils.d.ts +2 -3
- package/dist/types/worker-server.d.ts +16 -0
- package/package.json +31 -15
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
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; }
|
|
2
|
-
|
|
3
2
|
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; }
|
|
4
|
-
|
|
5
3
|
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; }
|
|
6
|
-
|
|
7
4
|
import path from 'path';
|
|
8
5
|
import fs from 'fs';
|
|
9
6
|
import { Logger, SHARED_DIR, OUTPUT_CONFIG_FILE, dotenv, dotenvExpand, INTERNAL_SERVER_PLUGINS } from '@modern-js/utils';
|
|
@@ -15,17 +12,11 @@ import { createProdServer } from "./modern-server-split";
|
|
|
15
12
|
export class Server {
|
|
16
13
|
constructor(options) {
|
|
17
14
|
_defineProperty(this, "options", void 0);
|
|
18
|
-
|
|
19
15
|
_defineProperty(this, "serverImpl", createProdServer);
|
|
20
|
-
|
|
21
16
|
_defineProperty(this, "server", void 0);
|
|
22
|
-
|
|
23
17
|
_defineProperty(this, "app", void 0);
|
|
24
|
-
|
|
25
18
|
_defineProperty(this, "runner", void 0);
|
|
26
|
-
|
|
27
19
|
_defineProperty(this, "serverConfig", void 0);
|
|
28
|
-
|
|
29
20
|
options.logger = options.logger || new Logger({
|
|
30
21
|
level: 'warn'
|
|
31
22
|
});
|
|
@@ -33,6 +24,7 @@ export class Server {
|
|
|
33
24
|
this.options = options;
|
|
34
25
|
this.serverConfig = {};
|
|
35
26
|
}
|
|
27
|
+
|
|
36
28
|
/**
|
|
37
29
|
* 初始化顺序
|
|
38
30
|
* - 读取 .env.{process.env.MODERN_ENV} 文件,加载环境变量
|
|
@@ -47,66 +39,61 @@ export class Server {
|
|
|
47
39
|
* - 执行 prepare hook
|
|
48
40
|
* - 执行 server init
|
|
49
41
|
*/
|
|
50
|
-
|
|
51
|
-
|
|
52
42
|
async init() {
|
|
53
43
|
const {
|
|
54
44
|
options
|
|
55
45
|
} = this;
|
|
56
46
|
this.loadServerEnv(options);
|
|
57
47
|
this.initServerConfig(options);
|
|
58
|
-
await this.injectContext(this.runner, options);
|
|
48
|
+
await this.injectContext(this.runner, options);
|
|
59
49
|
|
|
60
|
-
|
|
50
|
+
// initialize server runner
|
|
51
|
+
this.runner = await this.createHookRunner();
|
|
61
52
|
|
|
53
|
+
// init config and execute config hook
|
|
62
54
|
await this.initConfig(this.runner, options);
|
|
63
|
-
await this.injectContext(this.runner, options);
|
|
55
|
+
await this.injectContext(this.runner, options);
|
|
64
56
|
|
|
57
|
+
// initialize server
|
|
65
58
|
this.server = this.serverImpl(options);
|
|
66
|
-
await this.runPrepareHook(this.runner);
|
|
59
|
+
await this.runPrepareHook(this.runner);
|
|
67
60
|
|
|
68
|
-
|
|
61
|
+
// create http-server
|
|
62
|
+
this.app = await this.server.createHTTPServer(this.getRequestHandler());
|
|
69
63
|
|
|
64
|
+
// runner can only be used after server init
|
|
70
65
|
await this.server.onInit(this.runner, this.app);
|
|
71
66
|
return this;
|
|
72
67
|
}
|
|
68
|
+
|
|
73
69
|
/**
|
|
74
70
|
* Execute config hooks
|
|
75
71
|
* @param runner
|
|
76
72
|
* @param options
|
|
77
73
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
80
74
|
runConfigHook(runner, serverConfig) {
|
|
81
75
|
const newServerConfig = runner.config(serverConfig || {});
|
|
82
76
|
return newServerConfig;
|
|
83
77
|
}
|
|
84
|
-
|
|
85
78
|
async runPrepareHook(runner) {
|
|
86
79
|
runner.prepare();
|
|
87
80
|
}
|
|
88
|
-
|
|
89
81
|
initServerConfig(options) {
|
|
90
|
-
var _options$config$outpu;
|
|
91
|
-
|
|
92
82
|
const {
|
|
93
83
|
pwd,
|
|
94
84
|
serverConfigFile
|
|
95
85
|
} = options;
|
|
96
|
-
const distDirectory = path.join(pwd,
|
|
86
|
+
const distDirectory = path.join(pwd, options.config.output.path || 'dist');
|
|
97
87
|
const serverConfigPath = getServerConfigPath(distDirectory, serverConfigFile);
|
|
98
88
|
const serverConfig = requireConfig(serverConfigPath);
|
|
99
89
|
this.serverConfig = serverConfig;
|
|
100
90
|
}
|
|
91
|
+
|
|
101
92
|
/**
|
|
102
93
|
*
|
|
103
94
|
* merge cliConfig and serverConfig
|
|
104
95
|
*/
|
|
105
|
-
|
|
106
|
-
|
|
107
96
|
async initConfig(runner, options) {
|
|
108
|
-
var _config$output;
|
|
109
|
-
|
|
110
97
|
const {
|
|
111
98
|
pwd,
|
|
112
99
|
config
|
|
@@ -115,70 +102,62 @@ export class Server {
|
|
|
115
102
|
serverConfig
|
|
116
103
|
} = this;
|
|
117
104
|
const finalServerConfig = this.runConfigHook(runner, serverConfig);
|
|
118
|
-
const resolvedConfigPath = path.join(pwd,
|
|
105
|
+
const resolvedConfigPath = path.join(pwd, config.output.path || 'dist', OUTPUT_CONFIG_FILE);
|
|
119
106
|
options.config = loadConfig({
|
|
120
107
|
cliConfig: config,
|
|
121
108
|
serverConfig: finalServerConfig,
|
|
122
109
|
resolvedConfigPath
|
|
123
110
|
});
|
|
124
111
|
}
|
|
125
|
-
|
|
126
112
|
async close() {
|
|
127
113
|
this.app.close();
|
|
128
114
|
}
|
|
129
|
-
|
|
130
115
|
listen(options, listener) {
|
|
131
116
|
const callback = () => {
|
|
132
117
|
listener === null || listener === void 0 ? void 0 : listener();
|
|
133
118
|
};
|
|
134
|
-
|
|
135
119
|
if (typeof options === 'object') {
|
|
136
120
|
this.app.listen(options, callback);
|
|
137
121
|
} else {
|
|
138
122
|
this.app.listen(process.env.PORT || options || 8080, callback);
|
|
139
123
|
}
|
|
140
124
|
}
|
|
141
|
-
|
|
142
125
|
getRequestHandler() {
|
|
143
126
|
return (req, res, next) => {
|
|
144
127
|
const requestHandler = this.server.getRequestHandler();
|
|
145
128
|
return requestHandler(req, res, next);
|
|
146
129
|
};
|
|
147
130
|
}
|
|
148
|
-
|
|
149
131
|
async render(req, res, url) {
|
|
150
132
|
return this.server.render(req, res, url);
|
|
151
133
|
}
|
|
152
|
-
|
|
153
134
|
async createHookRunner() {
|
|
154
135
|
// clear server manager every create time
|
|
155
136
|
serverManager.clear();
|
|
156
137
|
const {
|
|
157
138
|
options
|
|
158
|
-
} = this;
|
|
159
|
-
|
|
139
|
+
} = this;
|
|
140
|
+
// TODO: 确认下这里是不是可以不从 options 中取插件,而是从 config 中取和过滤
|
|
160
141
|
const {
|
|
161
142
|
internalPlugins = INTERNAL_SERVER_PLUGINS,
|
|
162
|
-
pwd
|
|
163
|
-
config
|
|
143
|
+
pwd
|
|
164
144
|
} = options;
|
|
165
|
-
const serverPlugins = this.serverConfig.plugins || [];
|
|
145
|
+
const serverPlugins = this.serverConfig.plugins || [];
|
|
166
146
|
|
|
147
|
+
// server app context for serve plugin
|
|
167
148
|
const loadedPlugins = loadPlugins(pwd, serverPlugins, {
|
|
168
149
|
internalPlugins
|
|
169
150
|
});
|
|
170
|
-
debug('plugins',
|
|
151
|
+
debug('plugins', loadedPlugins);
|
|
171
152
|
loadedPlugins.forEach(p => {
|
|
172
153
|
serverManager.usePlugin(p);
|
|
173
|
-
});
|
|
154
|
+
});
|
|
174
155
|
|
|
156
|
+
// create runner
|
|
175
157
|
const hooksRunner = await serverManager.init();
|
|
176
158
|
return hooksRunner;
|
|
177
159
|
}
|
|
178
|
-
|
|
179
160
|
async injectContext(runner, options) {
|
|
180
|
-
var _config$output2;
|
|
181
|
-
|
|
182
161
|
const appContext = this.initAppContext();
|
|
183
162
|
const {
|
|
184
163
|
config,
|
|
@@ -186,13 +165,10 @@ export class Server {
|
|
|
186
165
|
} = options;
|
|
187
166
|
ConfigContext.set(config);
|
|
188
167
|
AppContext.set(_objectSpread(_objectSpread({}, appContext), {}, {
|
|
189
|
-
distDirectory: path.join(pwd,
|
|
168
|
+
distDirectory: path.join(pwd, config.output.path || 'dist')
|
|
190
169
|
}));
|
|
191
170
|
}
|
|
192
|
-
|
|
193
171
|
initAppContext() {
|
|
194
|
-
var _config$output3;
|
|
195
|
-
|
|
196
172
|
const {
|
|
197
173
|
options
|
|
198
174
|
} = this;
|
|
@@ -206,19 +182,17 @@ export class Server {
|
|
|
206
182
|
}));
|
|
207
183
|
return {
|
|
208
184
|
appDirectory,
|
|
209
|
-
distDirectory: path.join(appDirectory,
|
|
185
|
+
distDirectory: path.join(appDirectory, config.output.path || 'dist'),
|
|
210
186
|
sharedDirectory: path.resolve(appDirectory, SHARED_DIR),
|
|
211
187
|
plugins: serverPlugins
|
|
212
188
|
};
|
|
213
189
|
}
|
|
214
|
-
|
|
215
190
|
loadServerEnv(options) {
|
|
216
191
|
const {
|
|
217
192
|
pwd: appDirectory
|
|
218
193
|
} = options;
|
|
219
194
|
const serverEnv = process.env.MODERN_ENV;
|
|
220
195
|
const serverEnvPath = path.resolve(appDirectory, `.env.${serverEnv}`);
|
|
221
|
-
|
|
222
196
|
if (serverEnv && fs.existsSync(serverEnvPath) && !fs.statSync(serverEnvPath).isDirectory()) {
|
|
223
197
|
const envConfig = dotenv.config({
|
|
224
198
|
path: serverEnvPath
|
|
@@ -226,5 +200,4 @@ export class Server {
|
|
|
226
200
|
dotenvExpand(envConfig);
|
|
227
201
|
}
|
|
228
202
|
}
|
|
229
|
-
|
|
230
203
|
}
|
|
@@ -1,43 +1,32 @@
|
|
|
1
1
|
import { ModernServer } from "./modern-server";
|
|
2
|
-
|
|
3
2
|
class ModernSSRServer extends ModernServer {
|
|
4
3
|
prepareAPIHandler(_) {
|
|
5
4
|
return null;
|
|
6
5
|
}
|
|
7
|
-
|
|
8
6
|
async handleAPI(context) {
|
|
9
7
|
return this.render404(context);
|
|
10
8
|
}
|
|
11
|
-
|
|
12
9
|
}
|
|
13
|
-
|
|
14
10
|
class ModernAPIServer extends ModernServer {
|
|
15
11
|
prepareWebHandler(_) {
|
|
16
12
|
return null;
|
|
17
13
|
}
|
|
18
|
-
|
|
19
14
|
filterRoutes(routes) {
|
|
20
15
|
return routes.filter(route => route.isApi);
|
|
21
16
|
}
|
|
22
|
-
|
|
23
17
|
}
|
|
24
|
-
|
|
25
18
|
class ModernWebServer extends ModernServer {
|
|
26
19
|
async warmupSSRBundle() {
|
|
27
20
|
return null;
|
|
28
21
|
}
|
|
29
|
-
|
|
30
22
|
async handleAPI(context) {
|
|
31
23
|
return this.render404(context);
|
|
32
24
|
}
|
|
33
|
-
|
|
34
25
|
async handleWeb(context, route) {
|
|
35
26
|
route.isSSR = false;
|
|
36
27
|
return super.handleWeb(context, route);
|
|
37
28
|
}
|
|
38
|
-
|
|
39
29
|
}
|
|
40
|
-
|
|
41
30
|
export const createProdServer = options => {
|
|
42
31
|
if (options.apiOnly) {
|
|
43
32
|
return new ModernAPIServer(options);
|