fix(Server): don't use `spdy` on `node >= v10.0.0` (#1451) · webpack/webpack-dev-server@8ab9eb6

Original file line numberDiff line numberDiff line change

@@ -15,6 +15,7 @@ const path = require('path');

1515

const ip = require('ip');

1616

const url = require('url');

1717

const http = require('http');

18+

const https = require('https');

1819

const spdy = require('spdy');

1920

const 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

}