@modern-js/server 1.4.7-canary.2 → 1.4.9
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/dev-tools/babel/register.js +1 -0
- package/dist/js/modern/server/dev-server.js +49 -2
- package/dist/js/node/dev-tools/babel/register.js +1 -0
- package/dist/js/node/server/dev-server.js +49 -2
- package/dist/types/server/dev-server.d.ts +2 -0
- package/jest.config.js +0 -1
- package/package.json +22 -24
- package/tests/watcher.test.ts +90 -87
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @modern-js/server
|
|
2
2
|
|
|
3
|
+
## 1.4.9
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bebb39b6: chore: improve devDependencies and peerDependencies
|
|
8
|
+
- Updated dependencies [bebb39b6]
|
|
9
|
+
- Updated dependencies [afc836f4]
|
|
10
|
+
- Updated dependencies [132f7b53]
|
|
11
|
+
- @modern-js/prod-server@1.0.6
|
|
12
|
+
- @modern-js/server-utils@1.2.2
|
|
13
|
+
- @modern-js/hmr-client@1.2.3
|
|
14
|
+
- @modern-js/utils@1.3.7
|
|
15
|
+
|
|
16
|
+
## 1.4.8
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- a8df060e: support setup dev middleware first step
|
|
21
|
+
- d2d0fa11: fix: missing devServer.proxy typing
|
|
22
|
+
- 6a7acb81: modify devServer type and name
|
|
23
|
+
- Updated dependencies [c2046f37]
|
|
24
|
+
- Updated dependencies [d2d0fa11]
|
|
25
|
+
- @modern-js/utils@1.3.6
|
|
26
|
+
- @modern-js/prod-server@1.0.5
|
|
27
|
+
|
|
28
|
+
## 1.4.7
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- d95f28c3: remove server hook when api only
|
|
33
|
+
- d5bf095a: fix: disable load webpack when apiOnly mode
|
|
34
|
+
- 9229dfd1: support custom headers, fix hmr url concat
|
|
35
|
+
- Updated dependencies [5bf5868d]
|
|
36
|
+
- Updated dependencies [d95f28c3]
|
|
37
|
+
- Updated dependencies [d95f28c3]
|
|
38
|
+
- Updated dependencies [0923c182]
|
|
39
|
+
- Updated dependencies [2008fdbd]
|
|
40
|
+
- Updated dependencies [ca0bcf13]
|
|
41
|
+
- @modern-js/utils@1.3.5
|
|
42
|
+
- @modern-js/prod-server@1.0.4
|
|
43
|
+
|
|
3
44
|
## 1.4.6
|
|
4
45
|
|
|
5
46
|
### Patch Changes
|
|
@@ -39,12 +39,24 @@ export class ModernDevServer extends ModernServer {
|
|
|
39
39
|
async onInit(runner) {
|
|
40
40
|
var _conf$tools, _conf$tools$devServer;
|
|
41
41
|
|
|
42
|
+
this.runner = runner;
|
|
42
43
|
const {
|
|
43
44
|
conf,
|
|
44
45
|
pwd,
|
|
45
46
|
compiler,
|
|
46
47
|
dev
|
|
47
|
-
} = this; //
|
|
48
|
+
} = this; // before dev handler
|
|
49
|
+
|
|
50
|
+
const beforeHandlers = await this.setupBeforeDevMiddleware();
|
|
51
|
+
beforeHandlers.forEach(handler => {
|
|
52
|
+
this.addHandler((ctx, next) => {
|
|
53
|
+
const {
|
|
54
|
+
req,
|
|
55
|
+
res
|
|
56
|
+
} = ctx;
|
|
57
|
+
return handler(req, res, next);
|
|
58
|
+
});
|
|
59
|
+
}); // mock handler
|
|
48
60
|
|
|
49
61
|
this.mockHandler = createMockHandler({
|
|
50
62
|
pwd
|
|
@@ -74,8 +86,19 @@ export class ModernDevServer extends ModernServer {
|
|
|
74
86
|
|
|
75
87
|
const devMiddlewareHandler = this.setupCompiler(compiler);
|
|
76
88
|
this.addHandler(devMiddlewareHandler);
|
|
77
|
-
}
|
|
89
|
+
} // after dev handler
|
|
90
|
+
|
|
78
91
|
|
|
92
|
+
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
93
|
+
afterHandlers.forEach(handler => {
|
|
94
|
+
this.addHandler((ctx, next) => {
|
|
95
|
+
const {
|
|
96
|
+
req,
|
|
97
|
+
res
|
|
98
|
+
} = ctx;
|
|
99
|
+
return handler(req, res, next);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
79
102
|
await super.onInit(runner); // watch mock/ server/ api/ dir file change
|
|
80
103
|
|
|
81
104
|
if (dev.watch) {
|
|
@@ -252,6 +275,30 @@ export class ModernDevServer extends ModernServer {
|
|
|
252
275
|
};
|
|
253
276
|
}
|
|
254
277
|
|
|
278
|
+
async setupBeforeDevMiddleware() {
|
|
279
|
+
var _conf$tools$devServer2;
|
|
280
|
+
|
|
281
|
+
const {
|
|
282
|
+
runner,
|
|
283
|
+
conf
|
|
284
|
+
} = this;
|
|
285
|
+
const setupMids = ((_conf$tools$devServer2 = conf.tools.devServer) === null || _conf$tools$devServer2 === void 0 ? void 0 : _conf$tools$devServer2.before) || [];
|
|
286
|
+
const pluginMids = await runner.beforeDevServer(conf);
|
|
287
|
+
return [...setupMids, ...pluginMids].flat();
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
async setupAfterDevMiddleware() {
|
|
291
|
+
var _conf$tools$devServer3;
|
|
292
|
+
|
|
293
|
+
const {
|
|
294
|
+
runner,
|
|
295
|
+
conf
|
|
296
|
+
} = this;
|
|
297
|
+
const setupMids = ((_conf$tools$devServer3 = conf.tools.devServer) === null || _conf$tools$devServer3 === void 0 ? void 0 : _conf$tools$devServer3.after) || [];
|
|
298
|
+
const pluginMids = await runner.afterDevServer(conf);
|
|
299
|
+
return [...pluginMids, ...setupMids].flat();
|
|
300
|
+
}
|
|
301
|
+
|
|
255
302
|
cleanSSRCache() {
|
|
256
303
|
const {
|
|
257
304
|
distDir
|
|
@@ -61,12 +61,24 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
61
61
|
async onInit(runner) {
|
|
62
62
|
var _conf$tools, _conf$tools$devServer;
|
|
63
63
|
|
|
64
|
+
this.runner = runner;
|
|
64
65
|
const {
|
|
65
66
|
conf,
|
|
66
67
|
pwd,
|
|
67
68
|
compiler,
|
|
68
69
|
dev
|
|
69
|
-
} = this; //
|
|
70
|
+
} = this; // before dev handler
|
|
71
|
+
|
|
72
|
+
const beforeHandlers = await this.setupBeforeDevMiddleware();
|
|
73
|
+
beforeHandlers.forEach(handler => {
|
|
74
|
+
this.addHandler((ctx, next) => {
|
|
75
|
+
const {
|
|
76
|
+
req,
|
|
77
|
+
res
|
|
78
|
+
} = ctx;
|
|
79
|
+
return handler(req, res, next);
|
|
80
|
+
});
|
|
81
|
+
}); // mock handler
|
|
70
82
|
|
|
71
83
|
this.mockHandler = (0, _mock.createMockHandler)({
|
|
72
84
|
pwd
|
|
@@ -96,8 +108,19 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
96
108
|
|
|
97
109
|
const devMiddlewareHandler = this.setupCompiler(compiler);
|
|
98
110
|
this.addHandler(devMiddlewareHandler);
|
|
99
|
-
}
|
|
111
|
+
} // after dev handler
|
|
112
|
+
|
|
100
113
|
|
|
114
|
+
const afterHandlers = await this.setupAfterDevMiddleware();
|
|
115
|
+
afterHandlers.forEach(handler => {
|
|
116
|
+
this.addHandler((ctx, next) => {
|
|
117
|
+
const {
|
|
118
|
+
req,
|
|
119
|
+
res
|
|
120
|
+
} = ctx;
|
|
121
|
+
return handler(req, res, next);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
101
124
|
await super.onInit(runner); // watch mock/ server/ api/ dir file change
|
|
102
125
|
|
|
103
126
|
if (dev.watch) {
|
|
@@ -276,6 +299,30 @@ class ModernDevServer extends _prodServer.ModernServer {
|
|
|
276
299
|
};
|
|
277
300
|
}
|
|
278
301
|
|
|
302
|
+
async setupBeforeDevMiddleware() {
|
|
303
|
+
var _conf$tools$devServer2;
|
|
304
|
+
|
|
305
|
+
const {
|
|
306
|
+
runner,
|
|
307
|
+
conf
|
|
308
|
+
} = this;
|
|
309
|
+
const setupMids = ((_conf$tools$devServer2 = conf.tools.devServer) === null || _conf$tools$devServer2 === void 0 ? void 0 : _conf$tools$devServer2.before) || [];
|
|
310
|
+
const pluginMids = await runner.beforeDevServer(conf);
|
|
311
|
+
return [...setupMids, ...pluginMids].flat();
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
async setupAfterDevMiddleware() {
|
|
315
|
+
var _conf$tools$devServer3;
|
|
316
|
+
|
|
317
|
+
const {
|
|
318
|
+
runner,
|
|
319
|
+
conf
|
|
320
|
+
} = this;
|
|
321
|
+
const setupMids = ((_conf$tools$devServer3 = conf.tools.devServer) === null || _conf$tools$devServer3 === void 0 ? void 0 : _conf$tools$devServer3.after) || [];
|
|
322
|
+
const pluginMids = await runner.afterDevServer(conf);
|
|
323
|
+
return [...pluginMids, ...setupMids].flat();
|
|
324
|
+
}
|
|
325
|
+
|
|
279
326
|
cleanSSRCache() {
|
|
280
327
|
const {
|
|
281
328
|
distDir
|
|
@@ -25,6 +25,8 @@ export declare class ModernDevServer extends ModernServer {
|
|
|
25
25
|
private setupDevServerPlugin;
|
|
26
26
|
private setupHooks;
|
|
27
27
|
private setupDevMiddleware;
|
|
28
|
+
private setupBeforeDevMiddleware;
|
|
29
|
+
private setupAfterDevMiddleware;
|
|
28
30
|
private cleanSSRCache;
|
|
29
31
|
private startWatcher;
|
|
30
32
|
}
|
package/jest.config.js
CHANGED
|
@@ -2,7 +2,6 @@ const sharedConfig = require('@scripts/jest-config');
|
|
|
2
2
|
|
|
3
3
|
/** @type {import('@jest/types').Config.InitialOptions} */
|
|
4
4
|
module.exports = {
|
|
5
|
-
// eslint-disable-next-line node/no-unsupported-features/es-syntax
|
|
6
5
|
...sharedConfig,
|
|
7
6
|
testEnvironment: 'node',
|
|
8
7
|
rootDir: __dirname,
|
package/package.json
CHANGED
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "1.4.
|
|
14
|
+
"version": "1.4.9",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
|
-
"types": "./
|
|
16
|
+
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
18
18
|
"module": "./dist/js/treeshaking/index.js",
|
|
19
19
|
"jsnext:modern": "./dist/js/modern/index.js",
|
|
@@ -27,21 +27,13 @@
|
|
|
27
27
|
"default": "./dist/js/treeshaking/index.js"
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
|
-
"scripts": {
|
|
31
|
-
"prepare": "pnpm build",
|
|
32
|
-
"prepublishOnly": "pnpm build --platform",
|
|
33
|
-
"new": "modern new",
|
|
34
|
-
"build": "modern build",
|
|
35
|
-
"dev": "modern build --watch",
|
|
36
|
-
"test": "jest"
|
|
37
|
-
},
|
|
38
30
|
"dependencies": {
|
|
39
|
-
"@modern-js/prod-server": "^1.0.2",
|
|
40
31
|
"@babel/register": "^7.15.3",
|
|
41
32
|
"@modern-js/bff-utils": "^1.2.2",
|
|
42
|
-
"@modern-js/hmr-client": "^1.2.
|
|
43
|
-
"@modern-js/server
|
|
44
|
-
"@modern-js/utils": "^1.
|
|
33
|
+
"@modern-js/hmr-client": "^1.2.3",
|
|
34
|
+
"@modern-js/prod-server": "^1.0.6",
|
|
35
|
+
"@modern-js/server-utils": "^1.2.2",
|
|
36
|
+
"@modern-js/utils": "^1.3.7",
|
|
45
37
|
"chokidar": "^3.5.2",
|
|
46
38
|
"devcert": "^1.1.3",
|
|
47
39
|
"launch-editor": "^2.2.1",
|
|
@@ -52,10 +44,11 @@
|
|
|
52
44
|
"ws": "^8.2.0"
|
|
53
45
|
},
|
|
54
46
|
"devDependencies": {
|
|
55
|
-
"@modern-js/
|
|
56
|
-
"@modern-js/core": "
|
|
57
|
-
"@
|
|
58
|
-
"@
|
|
47
|
+
"@modern-js/core": "1.6.1",
|
|
48
|
+
"@modern-js/server-core": "1.2.5",
|
|
49
|
+
"@modern-js/types": "^1.3.6",
|
|
50
|
+
"@scripts/build": "0.0.0",
|
|
51
|
+
"@scripts/jest-config": "0.0.0",
|
|
59
52
|
"@types/jest": "^26",
|
|
60
53
|
"@types/minimatch": "^3.0.5",
|
|
61
54
|
"@types/node": "^14",
|
|
@@ -63,8 +56,7 @@
|
|
|
63
56
|
"@types/ws": "^7.4.7",
|
|
64
57
|
"jest": "^27",
|
|
65
58
|
"typescript": "^4",
|
|
66
|
-
"webpack": "^5.
|
|
67
|
-
"@scripts/jest-config": "*",
|
|
59
|
+
"webpack": "^5.71.0",
|
|
68
60
|
"websocket": "^1"
|
|
69
61
|
},
|
|
70
62
|
"peerDependencies": {
|
|
@@ -78,7 +70,13 @@
|
|
|
78
70
|
},
|
|
79
71
|
"publishConfig": {
|
|
80
72
|
"registry": "https://registry.npmjs.org/",
|
|
81
|
-
"access": "public"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
73
|
+
"access": "public"
|
|
74
|
+
},
|
|
75
|
+
"scripts": {
|
|
76
|
+
"new": "modern new",
|
|
77
|
+
"build": "modern build",
|
|
78
|
+
"dev": "modern build --watch",
|
|
79
|
+
"test": "jest"
|
|
80
|
+
},
|
|
81
|
+
"readme": "\n<p align=\"center\">\n <a href=\"https://modernjs.dev\" target=\"blank\"><img src=\"https://lf3-static.bytednsdoc.com/obj/eden-cn/ylaelkeh7nuhfnuhf/modernjs-cover.png\" width=\"300\" alt=\"Modern.js Logo\" /></a>\n</p>\n<p align=\"center\">\n现代 Web 工程体系\n <br/>\n <a href=\"https://modernjs.dev\" target=\"blank\">\n modernjs.dev\n </a>\n</p>\n<p align=\"center\">\n The meta-framework suite designed from scratch for frontend-focused modern web development\n</p>\n\n# Introduction\n\n> The doc site ([modernjs.dev](https://modernjs.dev)) and articles are only available in Chinese for now, we are planning to add English versions soon.\n\n- [Modern.js: Hello, World!](https://zhuanlan.zhihu.com/p/426707646)\n\n## Getting Started\n\n- [Quick Start](https://modernjs.dev/docs/start)\n- [Guides](https://modernjs.dev/docs/guides)\n- [API References](https://modernjs.dev/docs/apis)\n\n## Contributing\n\n- [Contributing Guide](https://github.com/modern-js-dev/modern.js/blob/main/CONTRIBUTING.md)\n"
|
|
82
|
+
}
|
package/tests/watcher.test.ts
CHANGED
|
@@ -21,93 +21,96 @@ describe('watcher', () => {
|
|
|
21
21
|
fs.removeSync(serverDir);
|
|
22
22
|
});
|
|
23
23
|
|
|
24
|
-
const writeFiles = (content: string, filepath: string) => {
|
|
25
|
-
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
24
|
+
// const writeFiles = (content: string, filepath: string) => {
|
|
25
|
+
// fs.writeFileSync(path.normalize(filepath), content, 'utf8');
|
|
26
|
+
// };
|
|
27
|
+
|
|
28
|
+
// TODO 容易导致 timeout,暂时注释掉
|
|
29
|
+
// test('should emit add', done => {
|
|
30
|
+
// const watcher = new Watcher();
|
|
31
|
+
// const callback = jest.fn();
|
|
32
|
+
|
|
33
|
+
// const watchDir = path.join(serverDir, 'add');
|
|
34
|
+
// fs.mkdirSync(watchDir);
|
|
35
|
+
|
|
36
|
+
// watcher.listen(
|
|
37
|
+
// [`${watchDir}/**/*`],
|
|
38
|
+
// {
|
|
39
|
+
// ignoreInitial: true,
|
|
40
|
+
// ignored: /api\/typings\/.*/,
|
|
41
|
+
// },
|
|
42
|
+
// async () => {
|
|
43
|
+
// try {
|
|
44
|
+
// callback();
|
|
45
|
+
// expect(callback).toHaveBeenCalledTimes(1);
|
|
46
|
+
// await watcher.close();
|
|
47
|
+
// } catch (e) {
|
|
48
|
+
// console.error(e);
|
|
49
|
+
// }
|
|
50
|
+
// done();
|
|
51
|
+
// },
|
|
52
|
+
// );
|
|
53
|
+
|
|
54
|
+
// setTimeout(() => writeFiles('test', path.join(watchDir, 'index.js')), 100);
|
|
55
|
+
// });
|
|
56
|
+
|
|
57
|
+
// TODO 容易导致 timeout,暂时注释掉
|
|
58
|
+
// test('should emit unlink', done => {
|
|
59
|
+
// const watcher = new Watcher();
|
|
60
|
+
|
|
61
|
+
// const callback = jest.fn();
|
|
62
|
+
// const watchDir = path.join(serverDir, 'unlink');
|
|
63
|
+
// fs.mkdirSync(watchDir);
|
|
64
|
+
|
|
65
|
+
// const filepath = path.join(watchDir, 'index.js');
|
|
66
|
+
// writeFiles('unlink', filepath);
|
|
67
|
+
|
|
68
|
+
// watcher.listen(
|
|
69
|
+
// [`${watchDir}/**/*`],
|
|
70
|
+
// {
|
|
71
|
+
// ignoreInitial: true,
|
|
72
|
+
// ignored: /api\/typings\/.*/,
|
|
73
|
+
// },
|
|
74
|
+
// async () => {
|
|
75
|
+
// callback();
|
|
76
|
+
// expect(callback).toHaveBeenCalledTimes(1);
|
|
77
|
+
// await watcher.close();
|
|
78
|
+
// done();
|
|
79
|
+
// },
|
|
80
|
+
// );
|
|
81
|
+
|
|
82
|
+
// setTimeout(() => {
|
|
83
|
+
// fs.removeSync(filepath);
|
|
84
|
+
// }, 100);
|
|
85
|
+
// });
|
|
86
|
+
|
|
87
|
+
// TODO 容易导致 timeout,暂时注释掉
|
|
88
|
+
// test('should emit change', done => {
|
|
89
|
+
// const watcher = new Watcher();
|
|
90
|
+
|
|
91
|
+
// const callback = jest.fn();
|
|
92
|
+
// const watchDir = path.join(serverDir, 'change');
|
|
93
|
+
// fs.mkdirSync(watchDir);
|
|
94
|
+
|
|
95
|
+
// const filepath = path.join(watchDir, 'index.js');
|
|
96
|
+
// writeFiles('start', filepath);
|
|
97
|
+
|
|
98
|
+
// watcher.listen(
|
|
99
|
+
// [`${watchDir}/**/*`],
|
|
100
|
+
// {
|
|
101
|
+
// ignoreInitial: true,
|
|
102
|
+
// ignored: /api\/typings\/.*/,
|
|
103
|
+
// },
|
|
104
|
+
// async () => {
|
|
105
|
+
// callback();
|
|
106
|
+
// expect(callback).toHaveBeenCalledTimes(1);
|
|
107
|
+
// await watcher.close();
|
|
108
|
+
// done();
|
|
109
|
+
// },
|
|
110
|
+
// );
|
|
111
|
+
|
|
112
|
+
// setTimeout(() => writeFiles('end', filepath), 100);
|
|
113
|
+
// });
|
|
111
114
|
|
|
112
115
|
test('should not emit change when typings file changed', done => {
|
|
113
116
|
const watcher = new Watcher();
|