@modern-js/server 2.0.0-beta.0 → 2.0.0-beta.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/js/modern/dev-tools/dev-middleware/dev-server-plugin.js +4 -9
  3. package/dist/js/modern/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +2 -5
  4. package/dist/js/modern/dev-tools/dev-middleware/hmr-client/index.js +43 -50
  5. package/dist/js/modern/dev-tools/dev-middleware/index.js +14 -32
  6. package/dist/js/modern/dev-tools/dev-middleware/socket-server.js +18 -43
  7. package/dist/js/modern/dev-tools/https/index.js +0 -2
  8. package/dist/js/modern/dev-tools/mock/getMockData.js +4 -23
  9. package/dist/js/modern/dev-tools/mock/index.js +0 -8
  10. package/dist/js/modern/dev-tools/register/index.js +2 -18
  11. package/dist/js/modern/dev-tools/watcher/dependency-tree.js +5 -15
  12. package/dist/js/modern/dev-tools/watcher/index.js +0 -18
  13. package/dist/js/modern/dev-tools/watcher/stats-cache.js +0 -16
  14. package/dist/js/modern/index.js +0 -1
  15. package/dist/js/modern/server/dev-server.js +36 -56
  16. package/dist/js/modern/server/index.js +0 -4
  17. package/dist/js/node/constants.js +0 -3
  18. package/dist/js/node/dev-tools/dev-middleware/dev-server-plugin.js +4 -11
  19. package/dist/js/node/dev-tools/dev-middleware/hmr-client/createSocketUrl.js +2 -8
  20. package/dist/js/node/dev-tools/dev-middleware/hmr-client/index.js +41 -53
  21. package/dist/js/node/dev-tools/dev-middleware/index.js +14 -38
  22. package/dist/js/node/dev-tools/dev-middleware/socket-server.js +18 -48
  23. package/dist/js/node/dev-tools/https/index.js +0 -7
  24. package/dist/js/node/dev-tools/mock/getMockData.js +4 -29
  25. package/dist/js/node/dev-tools/mock/index.js +0 -17
  26. package/dist/js/node/dev-tools/register/index.js +2 -27
  27. package/dist/js/node/dev-tools/watcher/dependency-tree.js +5 -19
  28. package/dist/js/node/dev-tools/watcher/index.js +0 -32
  29. package/dist/js/node/dev-tools/watcher/stats-cache.js +0 -23
  30. package/dist/js/node/index.js +0 -4
  31. package/dist/js/node/server/dev-server.js +36 -75
  32. package/dist/js/node/server/index.js +0 -7
  33. package/dist/types/dev-tools/mock/getMockData.d.ts +0 -2
  34. package/dist/types/dev-tools/watcher/dependency-tree.d.ts +0 -2
  35. package/dist/types/index.d.ts +0 -2
  36. package/package.json +11 -11
@@ -4,16 +4,11 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.defaultIgnores = exports.DependencyTree = void 0;
7
-
8
7
  var _minimatch = _interopRequireDefault(require("minimatch"));
9
-
10
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
9
  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; }
13
-
14
10
  const defaultIgnores = ['**/bower_components/**', '**/coverage/**', '**/node_modules/**', '**/.*/**', '**/*.d.ts', '**/*.log'];
15
11
  exports.defaultIgnores = defaultIgnores;
16
-
17
12
  /**
18
13
  * `require.cache` already is a dependency tree, however require cache's
19
14
  * `module.parent` is the module that first required. so we have to implement
@@ -22,26 +17,23 @@ exports.defaultIgnores = defaultIgnores;
22
17
  class DependencyTree {
23
18
  constructor() {
24
19
  _defineProperty(this, "tree", void 0);
25
-
26
20
  _defineProperty(this, "ignore", void 0);
27
-
28
21
  this.tree = new Map();
29
22
  this.ignore = [...defaultIgnores];
30
23
  }
31
-
32
24
  getNode(path) {
33
25
  return this.tree.get(path);
34
26
  }
27
+
35
28
  /**
36
29
  * update dependency tree
37
30
  *
38
31
  * @param cache
39
32
  */
40
-
41
-
42
33
  update(cache) {
43
- this.tree.clear(); // insert all module that not ignored
34
+ this.tree.clear();
44
35
 
36
+ // insert all module that not ignored
45
37
  Object.keys(cache).forEach(path => {
46
38
  if (!this.shouldIgnore(path)) {
47
39
  const module = cache[path];
@@ -51,8 +43,9 @@ class DependencyTree {
51
43
  children: new Set()
52
44
  });
53
45
  }
54
- }); // update treeNode parent and children
46
+ });
55
47
 
48
+ // update treeNode parent and children
56
49
  for (const treeNode of this.tree.values()) {
57
50
  const {
58
51
  parent
@@ -60,19 +53,15 @@ class DependencyTree {
60
53
  const {
61
54
  children
62
55
  } = treeNode.module;
63
-
64
56
  if (parent && !this.shouldIgnore(parent.filename)) {
65
57
  const parentTreeNode = this.tree.get(parent.filename);
66
-
67
58
  if (parentTreeNode) {
68
59
  treeNode.parent.add(parentTreeNode);
69
60
  }
70
61
  }
71
-
72
62
  children.forEach(child => {
73
63
  if (!this.shouldIgnore(child.filename)) {
74
64
  const childTreeNode = this.tree.get(child.filename);
75
-
76
65
  if (childTreeNode) {
77
66
  treeNode.children.add(childTreeNode);
78
67
  childTreeNode.parent.add(treeNode);
@@ -81,11 +70,8 @@ class DependencyTree {
81
70
  });
82
71
  }
83
72
  }
84
-
85
73
  shouldIgnore(path) {
86
74
  return !path || Boolean(this.ignore.find(rule => _minimatch.default.match([path], rule).length > 0));
87
75
  }
88
-
89
76
  }
90
-
91
77
  exports.DependencyTree = DependencyTree;
@@ -4,30 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.mergeWatchOptions = exports.getWatchedFiles = exports.defaultWatchOptions = exports.default = void 0;
7
-
8
7
  var _path = _interopRequireDefault(require("path"));
9
-
10
8
  var _utils = require("@modern-js/utils");
11
-
12
9
  var _dependencyTree = require("./dependency-tree");
13
-
14
10
  var _statsCache = require("./stats-cache");
15
-
16
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
-
18
12
  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; }
19
-
20
13
  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; }
21
-
22
14
  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; }
23
-
24
15
  const defaultWatchOptions = {
25
16
  // 初始化的时候不触发 add、addDir 事件
26
17
  ignoreInitial: true,
27
18
  ignored: /api\/typings\/.*/
28
19
  };
29
20
  exports.defaultWatchOptions = defaultWatchOptions;
30
-
31
21
  const getWatchedFiles = watcher => {
32
22
  const watched = watcher.getWatched();
33
23
  const files = [];
@@ -38,44 +28,32 @@ const getWatchedFiles = watcher => {
38
28
  });
39
29
  return files;
40
30
  };
41
-
42
31
  exports.getWatchedFiles = getWatchedFiles;
43
-
44
32
  const mergeWatchOptions = options => {
45
33
  const watchOptions = _objectSpread({}, options);
46
-
47
34
  if (watchOptions) {
48
35
  const {
49
36
  ignored
50
37
  } = watchOptions;
51
38
  const finalIgnored = ignored ? [defaultWatchOptions.ignored, ...(Array.isArray(ignored) ? ignored : [ignored])] : ignored;
52
-
53
39
  if (finalIgnored) {
54
40
  watchOptions.ignored = finalIgnored;
55
41
  }
56
42
  }
57
-
58
43
  const finalWatchOptions = _objectSpread(_objectSpread({}, defaultWatchOptions), watchOptions);
59
-
60
44
  return finalWatchOptions;
61
45
  };
62
-
63
46
  exports.mergeWatchOptions = mergeWatchOptions;
64
-
65
47
  class Watcher {
66
48
  constructor() {
67
49
  _defineProperty(this, "dependencyTree", null);
68
-
69
50
  _defineProperty(this, "watcher", void 0);
70
51
  }
71
-
72
52
  listen(files, options, callback) {
73
53
  const watched = files.filter(Boolean);
74
54
  const filenames = watched.map(filename => filename.replace(/\\/g, '/'));
75
55
  const cache = new _statsCache.StatsCache();
76
-
77
56
  const watcher = _utils.chokidar.watch(filenames, options);
78
-
79
57
  watcher.on('ready', () => {
80
58
  cache.add(getWatchedFiles(watcher));
81
59
  });
@@ -97,35 +75,25 @@ class Watcher {
97
75
  });
98
76
  this.watcher = watcher;
99
77
  }
100
-
101
78
  createDepTree() {
102
79
  this.dependencyTree = new _dependencyTree.DependencyTree();
103
80
  }
104
-
105
81
  updateDepTree() {
106
82
  var _this$dependencyTree;
107
-
108
83
  (_this$dependencyTree = this.dependencyTree) === null || _this$dependencyTree === void 0 ? void 0 : _this$dependencyTree.update(require.cache);
109
84
  }
110
-
111
85
  cleanDepCache(filepath) {
112
86
  var _this$dependencyTree2;
113
-
114
87
  const node = (_this$dependencyTree2 = this.dependencyTree) === null || _this$dependencyTree2 === void 0 ? void 0 : _this$dependencyTree2.getNode(filepath);
115
-
116
88
  if (node && require.cache[filepath]) {
117
89
  delete require.cache[filepath];
118
-
119
90
  for (const parentNode of node.parent.values()) {
120
91
  this.cleanDepCache(parentNode.module.filename);
121
92
  }
122
93
  }
123
94
  }
124
-
125
95
  close() {
126
96
  return this.watcher.close();
127
97
  }
128
-
129
98
  }
130
-
131
99
  exports.default = Watcher;
@@ -4,32 +4,23 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.StatsCache = void 0;
7
-
8
7
  var _fs = _interopRequireDefault(require("fs"));
9
-
10
8
  var _crypto = _interopRequireDefault(require("crypto"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  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; }
15
-
16
11
  class StatsCache {
17
12
  constructor() {
18
13
  _defineProperty(this, "cachedHash", {});
19
-
20
14
  _defineProperty(this, "cachedSize", {});
21
15
  }
22
-
23
16
  add(files) {
24
17
  const {
25
18
  cachedHash,
26
19
  cachedSize
27
20
  } = this;
28
-
29
21
  for (const filename of files) {
30
22
  if (_fs.default.existsSync(filename)) {
31
23
  const stats = _fs.default.statSync(filename);
32
-
33
24
  if (stats.isFile() && !cachedHash[filename]) {
34
25
  cachedHash[filename] = this.hash(stats, filename);
35
26
  cachedSize[filename] = stats.size;
@@ -37,60 +28,46 @@ class StatsCache {
37
28
  }
38
29
  }
39
30
  }
40
-
41
31
  refresh(filename) {
42
32
  const {
43
33
  cachedHash,
44
34
  cachedSize
45
35
  } = this;
46
-
47
36
  if (_fs.default.existsSync(filename)) {
48
37
  const stats = _fs.default.statSync(filename);
49
-
50
38
  if (stats.isFile()) {
51
39
  cachedHash[filename] = this.hash(stats, filename);
52
40
  cachedSize[filename] = stats.size;
53
41
  }
54
42
  }
55
43
  }
56
-
57
44
  del(filename) {
58
45
  if (this.cachedHash[filename]) {
59
46
  delete this.cachedHash[filename];
60
47
  delete this.cachedSize[filename];
61
48
  }
62
49
  }
63
-
64
50
  isDiff(filename) {
65
51
  const {
66
52
  cachedHash,
67
53
  cachedSize
68
54
  } = this;
69
-
70
55
  const stats = _fs.default.statSync(filename);
71
-
72
56
  const hash = cachedHash[filename];
73
57
  const size = cachedSize[filename];
74
-
75
58
  if (stats.size !== size) {
76
59
  return true;
77
60
  }
78
-
79
61
  if (this.hash(stats, filename) !== hash) {
80
62
  return true;
81
63
  }
82
-
83
64
  return false;
84
65
  }
85
-
86
66
  has(filename) {
87
67
  return Boolean(this.cachedHash[filename]);
88
68
  }
89
-
90
69
  hash(stats, filename) {
91
70
  return _crypto.default.createHash('md5').update(_fs.default.readFileSync(filename)).digest('hex');
92
71
  }
93
-
94
72
  }
95
-
96
73
  exports.StatsCache = StatsCache;
@@ -10,16 +10,12 @@ Object.defineProperty(exports, "Server", {
10
10
  }
11
11
  });
12
12
  exports.default = void 0;
13
-
14
13
  var _server = require("./server");
15
-
16
14
  var _default = options => {
17
15
  if (options == null) {
18
16
  throw new Error('can not start mserver without options');
19
17
  }
20
-
21
18
  const server = new _server.DevServer(options);
22
19
  return server.init();
23
20
  };
24
-
25
21
  exports.default = _default;
@@ -4,57 +4,38 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ModernDevServer = void 0;
7
-
8
7
  var _http = require("http");
9
-
10
8
  var _path = _interopRequireDefault(require("path"));
11
-
12
9
  var _https = require("https");
13
-
14
10
  var _utils = require("@modern-js/utils");
15
-
16
11
  var _prodServer = require("@modern-js/prod-server");
17
-
18
12
  var _constants = require("@modern-js/utils/constants");
19
-
20
13
  var _constants2 = require("../constants");
21
-
22
14
  var _mock = require("../dev-tools/mock");
23
-
24
15
  var _register = require("../dev-tools/register");
25
-
26
16
  var _watcher = _interopRequireWildcard(require("../dev-tools/watcher"));
27
-
28
17
  var _devMiddleware = _interopRequireDefault(require("../dev-tools/dev-middleware"));
29
-
30
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
-
32
19
  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); }
33
-
34
20
  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; }
35
-
36
21
  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; }
37
-
38
22
  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; }
39
-
40
23
  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; }
41
-
42
24
  class ModernDevServer extends _prodServer.ModernServer {
43
25
  constructor(options) {
44
- super(options); // dev server should work in pwd
26
+ super(options);
45
27
 
28
+ // dev server should work in pwd
46
29
  _defineProperty(this, "mockHandler", null);
47
-
48
30
  _defineProperty(this, "dev", void 0);
49
-
50
31
  _defineProperty(this, "devMiddleware", void 0);
51
-
52
32
  _defineProperty(this, "watcher", void 0);
33
+ this.workDir = this.pwd;
53
34
 
54
- this.workDir = this.pwd; // set dev server options, like webpack-dev-server
55
-
56
- this.dev = this.getDevOptions(options); // create dev middleware instance
35
+ // set dev server options, like webpack-dev-server
36
+ this.dev = this.getDevOptions(options);
57
37
 
38
+ // create dev middleware instance
58
39
  this.devMiddleware = new _devMiddleware.default({
59
40
  dev: this.dev,
60
41
  compiler: options.compiler,
@@ -62,7 +43,6 @@ class ModernDevServer extends _prodServer.ModernServer {
62
43
  });
63
44
  (0, _register.enableRegister)(this.pwd, this.conf);
64
45
  }
65
-
66
46
  getDevOptions(options) {
67
47
  const devOptions = typeof options.dev === 'boolean' ? {} : options.dev;
68
48
  const defaultOptions = (0, _constants2.getDefaultDevOptions)();
@@ -70,7 +50,6 @@ class ModernDevServer extends _prodServer.ModernServer {
70
50
  client: _objectSpread(_objectSpread({}, defaultOptions.client), devOptions === null || devOptions === void 0 ? void 0 : devOptions.client)
71
51
  });
72
52
  }
73
-
74
53
  addMiddlewareHandler(handlers) {
75
54
  handlers.forEach(handler => {
76
55
  this.addHandler((ctx, next) => {
@@ -82,7 +61,6 @@ class ModernDevServer extends _prodServer.ModernServer {
82
61
  });
83
62
  });
84
63
  }
85
-
86
64
  applySetupMiddlewares() {
87
65
  const setupMiddlewares = this.dev.setupMiddlewares || [];
88
66
  const serverOptions = {
@@ -100,38 +78,40 @@ class ModernDevServer extends _prodServer.ModernServer {
100
78
  befores,
101
79
  afters
102
80
  };
103
- } // Complete the preparation of services
104
-
81
+ }
105
82
 
83
+ // Complete the preparation of services
106
84
  async onInit(runner, app) {
107
85
  this.runner = runner;
108
86
  const {
109
87
  dev
110
- } = this; // Order: devServer.before => setupMiddlewares.unshift => internal middlewares => setupMiddlewares.push => devServer.after
88
+ } = this;
111
89
 
90
+ // Order: devServer.before => setupMiddlewares.unshift => internal middlewares => setupMiddlewares.push => devServer.after
112
91
  const {
113
92
  befores,
114
93
  afters
115
- } = this.applySetupMiddlewares(); // before dev handler
94
+ } = this.applySetupMiddlewares();
116
95
 
96
+ // before dev handler
117
97
  const beforeHandlers = await this.setupBeforeDevMiddleware();
118
98
  this.addMiddlewareHandler([...beforeHandlers, ...befores]);
119
- await this.applyDefaultMiddlewares(app); // after dev handler
99
+ await this.applyDefaultMiddlewares(app);
120
100
 
101
+ // after dev handler
121
102
  const afterHandlers = await this.setupAfterDevMiddleware();
122
103
  this.addMiddlewareHandler([...afters, ...afterHandlers]);
123
- await super.onInit(runner, app); // watch mock/ server/ api/ dir file change
104
+ await super.onInit(runner, app);
124
105
 
106
+ // watch mock/ server/ api/ dir file change
125
107
  if (dev.watch) {
126
108
  this.startWatcher();
127
109
  app.on('close', async () => {
128
110
  var _this$watcher;
129
-
130
111
  await ((_this$watcher = this.watcher) === null || _this$watcher === void 0 ? void 0 : _this$watcher.close());
131
112
  });
132
113
  }
133
114
  }
134
-
135
115
  async applyDefaultMiddlewares(app) {
136
116
  const {
137
117
  pwd,
@@ -140,23 +120,22 @@ class ModernDevServer extends _prodServer.ModernServer {
140
120
  } = this;
141
121
  this.addHandler((ctx, next) => {
142
122
  // allow hmr request cross-domain, because the user may use global proxy
123
+ ctx.res.setHeader('Access-Control-Allow-Origin', '*');
143
124
  if (ctx.path.includes('hot-update')) {
144
- ctx.res.setHeader('Access-Control-Allow-Origin', '*');
145
125
  ctx.res.setHeader('Access-Control-Allow-Credentials', 'false');
146
- } // 用户在 devServer 上配置的 headers 不会对 html 的请求生效,加入下面代码,使配置的 headers 对所有请求生效
147
-
126
+ }
148
127
 
128
+ // 用户在 devServer 上配置的 headers 不会对 html 的请求生效,加入下面代码,使配置的 headers 对所有请求生效
149
129
  const confHeaders = dev.headers;
150
-
151
130
  if (confHeaders) {
152
131
  for (const [key, value] of Object.entries(confHeaders)) {
153
132
  ctx.res.setHeader(key, value);
154
133
  }
155
134
  }
156
-
157
135
  next();
158
- }); // mock handler
136
+ });
159
137
 
138
+ // mock handler
160
139
  this.mockHandler = (0, _mock.createMockHandler)({
161
140
  pwd
162
141
  });
@@ -166,17 +145,17 @@ class ModernDevServer extends _prodServer.ModernServer {
166
145
  } else {
167
146
  next();
168
147
  }
169
- }); // dev proxy handler, each proxy has own handler
148
+ });
170
149
 
150
+ // dev proxy handler, each proxy has own handler
171
151
  const proxyHandlers = (0, _prodServer.createProxyHandler)(dev.proxy);
172
-
173
152
  if (proxyHandlers) {
174
153
  proxyHandlers.forEach(handler => {
175
154
  this.addHandler(handler);
176
155
  });
177
- } // do webpack build / plugin apply / socket server when pass compiler instance
178
-
156
+ }
179
157
 
158
+ // do webpack build / plugin apply / socket server when pass compiler instance
180
159
  devMiddleware.init(app);
181
160
  devMiddleware.on('change', stats => {
182
161
  // Reset only when client compile done
@@ -193,14 +172,12 @@ class ModernDevServer extends _prodServer.ModernServer {
193
172
  req,
194
173
  res
195
174
  } = ctx;
196
-
197
175
  if (devMiddleware.middleware) {
198
176
  devMiddleware.middleware(req, res, next);
199
177
  } else {
200
178
  next();
201
179
  }
202
180
  });
203
-
204
181
  if (dev.historyApiFallback) {
205
182
  const {
206
183
  default: connectHistoryApiFallback
@@ -209,41 +186,37 @@ class ModernDevServer extends _prodServer.ModernServer {
209
186
  this.addHandler((ctx, next) => historyApiFallbackMiddleware(ctx.req, ctx.res, next));
210
187
  }
211
188
  }
212
-
213
189
  onRepack(options = {}) {
214
190
  // reset the routing management instance every times the service starts
215
191
  if (Array.isArray(options.routes)) {
216
192
  this.router.reset(this.filterRoutes(options.routes));
217
- } // clean ssr bundle cache
218
-
193
+ }
219
194
 
220
- this.cleanSSRCache(); // reset static file
195
+ // clean ssr bundle cache
196
+ this.cleanSSRCache();
221
197
 
198
+ // reset static file
222
199
  this.reader.updateFile();
223
200
  super.onRepack(options);
224
201
  }
225
-
226
202
  async createHTTPServer(handler) {
227
203
  const {
228
204
  dev
229
205
  } = this;
230
206
  const devHttpsOption = typeof dev === 'object' && dev.https;
231
-
232
207
  if (devHttpsOption) {
233
208
  const {
234
209
  genHttpsOptions
235
210
  } = require("../dev-tools/https");
236
-
237
211
  const httpsOptions = await genHttpsOptions(devHttpsOption);
238
212
  return (0, _https.createServer)(httpsOptions, handler);
239
213
  } else {
240
214
  return (0, _http.createServer)(handler);
241
215
  }
242
216
  }
243
-
244
- warmupSSRBundle() {// not warmup ssr bundle on development
217
+ warmupSSRBundle() {
218
+ // not warmup ssr bundle on development
245
219
  }
246
-
247
220
  onServerChange({
248
221
  filepath,
249
222
  event
@@ -254,11 +227,8 @@ class ModernDevServer extends _prodServer.ModernServer {
254
227
  const {
255
228
  mock
256
229
  } = _prodServer.AGGRED_DIR;
257
-
258
230
  const mockPath = _path.default.normalize(_path.default.join(pwd, mock));
259
-
260
231
  this.runner.reset();
261
-
262
232
  if (filepath.startsWith(mockPath)) {
263
233
  this.mockHandler = (0, _mock.createMockHandler)({
264
234
  pwd
@@ -268,11 +238,12 @@ class ModernDevServer extends _prodServer.ModernServer {
268
238
  const success = this.runner.onApiChange([{
269
239
  filename: filepath,
270
240
  event
271
- }]); // onApiChange 钩子被调用,且返回 true,则表示无需重新编译
241
+ }]);
242
+
243
+ // onApiChange 钩子被调用,且返回 true,则表示无需重新编译
272
244
  // onApiChange 的类型是 WaterFall,WaterFall 钩子的返回值类型目前有问题
273
245
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
274
246
  // @ts-expect-error
275
-
276
247
  if (success !== true) {
277
248
  super.onServerChange({
278
249
  filepath
@@ -283,13 +254,11 @@ class ModernDevServer extends _prodServer.ModernServer {
283
254
  }
284
255
  }
285
256
  }
286
-
287
257
  createContext(req, res) {
288
258
  return super.createContext(req, res, {
289
259
  etag: true
290
260
  });
291
261
  }
292
-
293
262
  async setupBeforeDevMiddleware() {
294
263
  const {
295
264
  runner,
@@ -300,7 +269,6 @@ class ModernDevServer extends _prodServer.ModernServer {
300
269
  const pluginMids = await runner.beforeDevServer(conf);
301
270
  return [...setupMids, ...pluginMids].flat();
302
271
  }
303
-
304
272
  async setupAfterDevMiddleware() {
305
273
  const {
306
274
  runner,
@@ -311,7 +279,6 @@ class ModernDevServer extends _prodServer.ModernServer {
311
279
  const pluginMids = await runner.afterDevServer(conf);
312
280
  return [...pluginMids, ...setupMids].flat();
313
281
  }
314
-
315
282
  cleanSSRCache() {
316
283
  const {
317
284
  distDir
@@ -319,22 +286,17 @@ class ModernDevServer extends _prodServer.ModernServer {
319
286
  const bundles = this.router.getBundles();
320
287
  bundles.forEach(bundle => {
321
288
  const filepath = _path.default.join(distDir, bundle);
322
-
323
289
  if (require.cache[filepath]) {
324
290
  delete require.cache[filepath];
325
291
  }
326
292
  });
327
-
328
293
  const loadable = _path.default.join(distDir, _constants.LOADABLE_STATS_FILE);
329
-
330
294
  if (require.cache[loadable]) {
331
295
  delete require.cache[loadable];
332
296
  }
333
297
  }
334
-
335
298
  startWatcher() {
336
299
  var _this$conf$server;
337
-
338
300
  const {
339
301
  pwd
340
302
  } = this;
@@ -345,8 +307,9 @@ class ModernDevServer extends _prodServer.ModernServer {
345
307
  const watchOptions = (0, _watcher.mergeWatchOptions)((_this$conf$server = this.conf.server) === null || _this$conf$server === void 0 ? void 0 : _this$conf$server.watchOptions);
346
308
  const defaultWatchedPaths = defaultWatched.map(p => _path.default.normalize(_path.default.join(pwd, p)));
347
309
  const watcher = new _watcher.default();
348
- watcher.createDepTree(); // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
310
+ watcher.createDepTree();
349
311
 
312
+ // 监听文件变动,如果有变动则给 client,也就是 start 启动的插件发消息
350
313
  watcher.listen(defaultWatchedPaths, watchOptions, (filepath, event) => {
351
314
  watcher.updateDepTree();
352
315
  watcher.cleanDepCache(filepath);
@@ -357,7 +320,5 @@ class ModernDevServer extends _prodServer.ModernServer {
357
320
  });
358
321
  this.watcher = watcher;
359
322
  }
360
-
361
323
  }
362
-
363
324
  exports.ModernDevServer = ModernDevServer;
@@ -4,24 +4,17 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DevServer = void 0;
7
-
8
7
  var _prodServer = require("@modern-js/prod-server");
9
-
10
8
  var _devServer = require("./dev-server");
11
-
12
9
  const createDevServer = options => {
13
10
  return new _devServer.ModernDevServer(options);
14
11
  };
15
-
16
12
  class DevServer extends _prodServer.Server {
17
13
  constructor(options) {
18
14
  super(options);
19
-
20
15
  if (options.dev) {
21
16
  this.serverImpl = createDevServer;
22
17
  }
23
18
  }
24
-
25
19
  }
26
-
27
20
  exports.DevServer = DevServer;
@@ -11,8 +11,6 @@ export declare type MockApi = {
11
11
  };
12
12
  declare const createFunctionDataHandler: (method: string, handler: (req: IncomingMessage, res: ServerResponse, next: NextFunction) => void) => (context: ModernServerContext, next: NextFunction) => Promise<void>;
13
13
  declare const createStaticDataHandler: (method: string, handler: Record<string, any>) => (context: ModernServerContext) => void;
14
-
15
14
  declare const _default: (filepath: string) => MockApi[];
16
-
17
15
  export default _default;
18
16
  export declare const getMatched: (context: ModernServerContext, mockApiList: MockApi[]) => MockApi | undefined;