@@ -15,6 +15,7 @@ const path = require('path');
1515const ip = require ( 'ip' ) ;
1616const url = require ( 'url' ) ;
1717const http = require ( 'http' ) ;
18+ const https = require ( 'https' ) ;
1819const spdy = require ( 'spdy' ) ;
1920const sockjs = require ( 'sockjs' ) ;
2021
@@ -571,7 +572,20 @@ function Server (compiler, options = {}, _log) {
571572 } ;
572573 }
573574
574- this . listeningApp = spdy . createServer ( options . https , app ) ;
575+ // `spdy` is effectively unmaintained, and as a consequence of an
576+ // implementation that extensively relies on Node’s non-public APIs, broken
577+ // on Node 10 and above. In those cases, only https will be used for now.
578+ // Once express supports Node's built-in HTTP/2 support, migrating over to
579+ // that should be the best way to go.
580+ // The relevant issues are:
581+ // - https://github.com/nodejs/node/issues/21665
582+ // - https://github.com/webpack/webpack-dev-server/issues/1449
583+ // - https://github.com/expressjs/express/issues/3388
584+ if ( + process . version . match ( / ^ v ( \d + ) / ) [ 1 ] >= 10 ) {
585+ this . listeningApp = https . createServer ( options . https , app ) ;
586+ } else {
587+ this . listeningApp = spdy . createServer ( options . https , app ) ;
588+ }
575589 } else {
576590 this . listeningApp = http . createServer ( app ) ;
577591 }
0 commit comments