@@ -201,7 +201,11 @@ const schema = require("./options.json");
201
201
*/
202
202
203
203
/**
204
- * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } | MiddlewareHandler } Middleware
204
+ * @typedef {{ name?: string, path?: string, middleware: MiddlewareHandler } } MiddlewareObject
205
+ */
206
+
207
+ /**
208
+ * @typedef {MiddlewareObject | MiddlewareHandler } Middleware
205
209
*/
206
210
207
211
/** @typedef {import("net").Server | import("tls").Server } BasicServer */
@@ -1228,7 +1232,6 @@ class Server {
1228
1232
if ( ! certificateExists ) {
1229
1233
this . logger . info ( "Generating SSL certificate..." ) ;
1230
1234
1231
- // @ts -ignore
1232
1235
const selfsigned = require ( "selfsigned" ) ;
1233
1236
const attributes = [ { name : "commonName" , value : "localhost" } ] ;
1234
1237
const pems = selfsigned . generate ( attributes , {
@@ -1987,18 +1990,9 @@ class Server {
1987
1990
} ) ;
1988
1991
}
1989
1992
1990
- const webpackDevMiddleware = require ( "webpack-dev-middleware" ) ;
1991
-
1992
- // middleware for serving webpack bundle
1993
- /** @type {import("webpack-dev-middleware").Middleware<Request, Response> }*/
1994
- const devMiddleware = webpackDevMiddleware (
1995
- this . compiler ,
1996
- this . options . devMiddleware ,
1997
- ) ;
1998
-
1999
1993
middlewares . push ( {
2000
1994
name : "webpack-dev-middleware" ,
2001
- middleware : devMiddleware ,
1995
+ middleware : /** @type { MiddlewareHandler } */ ( this . middleware ) ,
2002
1996
} ) ;
2003
1997
2004
1998
// Should be after `webpack-dev-middleware`, otherwise other middlewares might rewrite response
@@ -2024,9 +2018,7 @@ class Server {
2024
2018
) ;
2025
2019
2026
2020
// Express send Etag and other headers by default, so let's keep them for compatibility reasons
2027
- // @ts -ignore
2028
2021
if ( typeof res . sendFile === "function" ) {
2029
- // @ts -ignore
2030
2022
res . sendFile ( clientPath ) ;
2031
2023
return ;
2032
2024
}
@@ -2328,6 +2320,7 @@ class Server {
2328
2320
name : "http-proxy-middleware" ,
2329
2321
middleware : handler ,
2330
2322
} ) ;
2323
+
2331
2324
// Also forward error requests to the proxy so it can handle them.
2332
2325
middlewares . push ( {
2333
2326
name : "http-proxy-middleware-error-handler" ,
@@ -2345,7 +2338,7 @@ class Server {
2345
2338
2346
2339
middlewares . push ( {
2347
2340
name : "webpack-dev-middleware" ,
2348
- middleware : devMiddleware ,
2341
+ middleware : /** @type { MiddlewareHandler } */ ( this . middleware ) ,
2349
2342
} ) ;
2350
2343
}
2351
2344
@@ -2402,7 +2395,7 @@ class Server {
2402
2395
// it is able to handle '/index.html' request after redirect
2403
2396
middlewares . push ( {
2404
2397
name : "webpack-dev-middleware" ,
2405
- middleware : devMiddleware ,
2398
+ middleware : /** @type { MiddlewareHandler } */ ( this . middleware ) ,
2406
2399
} ) ;
2407
2400
2408
2401
if ( staticOptions . length > 0 ) {
@@ -2479,16 +2472,31 @@ class Server {
2479
2472
middlewares = this . options . setupMiddlewares ( middlewares , this ) ;
2480
2473
}
2481
2474
2482
- const foundDevMiddleware = middlewares . find (
2483
- ( item ) => item . name === "webpack-dev-middleware" ,
2484
- ) ;
2475
+ // Lazy init webpack dev middleware
2476
+ const lazyInitDevMiddleware = ( ) => {
2477
+ if ( ! this . middleware ) {
2478
+ const webpackDevMiddleware = require ( "webpack-dev-middleware" ) ;
2479
+
2480
+ // middleware for serving webpack bundle
2481
+ /** @type {import("webpack-dev-middleware").API<Request, Response> } */
2482
+ this . middleware = webpackDevMiddleware (
2483
+ this . compiler ,
2484
+ this . options . devMiddleware ,
2485
+ ) ;
2486
+ }
2487
+
2488
+ return this . middleware ;
2489
+ } ;
2490
+
2491
+ for ( const i of middlewares ) {
2492
+ if ( i . name === "webpack-dev-middleware" ) {
2493
+ const item = /** @type {MiddlewareObject } */ ( i ) ;
2485
2494
2486
- // TODO make it lazy
2487
- /** @type {import("webpack-dev-middleware").API<Request, Response> | undefined } */
2488
- this . middleware = foundDevMiddleware
2489
- ? /** @type {any } */ ( foundDevMiddleware ) . middleware
2490
- : // eslint-disable-next-line no-undefined
2491
- undefined ;
2495
+ if ( typeof item . middleware === "undefined" ) {
2496
+ item . middleware = lazyInitDevMiddleware ( ) ;
2497
+ }
2498
+ }
2499
+ }
2492
2500
2493
2501
for ( const middleware of middlewares ) {
2494
2502
if ( typeof middleware === "function" ) {
@@ -2761,14 +2769,11 @@ class Server {
2761
2769
*/
2762
2770
this . bonjour = new Bonjour ( ) ;
2763
2771
this . bonjour . publish ( {
2764
- // @ts -expect-error
2765
2772
name : `Webpack Dev Server ${ os . hostname ( ) } :${ this . options . port } ` ,
2766
- // @ts -expect-error
2767
2773
port : /** @type {number } */ ( this . options . port ) ,
2768
- // @ts -expect-error
2769
2774
type,
2770
2775
subtypes : [ "webpack" ] ,
2771
- .../** @type {BonjourOptions } */ ( this . options . bonjour ) ,
2776
+ .../** @type {Partial< BonjourOptions> } */ ( this . options . bonjour ) ,
2772
2777
} ) ;
2773
2778
}
2774
2779
0 commit comments