Skip to content

Commit 1201ac1

Browse files
authored
addresses #998 to properly assign a random port and access the port assigned (#1054)
1 parent 69239ce commit 1201ac1

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

bin/webpack-dev-server.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ function processOptions(webpackOptions) {
337337
// were specified, but since argv.port is 8080, options.port will be
338338
// tried first instead.
339339
options.port = argv.port === DEFAULT_PORT ? defaultTo(options.port, argv.port) : defaultTo(argv.port, options.port);
340+
340341
if (options.port != null) {
341342
startDevServer(wpOpt, options);
342343
return;
@@ -370,7 +371,7 @@ function startDevServer(webpackOptions, options) {
370371
}));
371372
}
372373

373-
const uri = createDomain(options) + (options.inline !== false || options.lazy === true ? '/' : '/webpack-dev-server/');
374+
const suffix = (options.inline !== false || options.lazy === true ? '/' : '/webpack-dev-server/');
374375

375376
let server;
376377
try {
@@ -415,13 +416,17 @@ function startDevServer(webpackOptions, options) {
415416
const READ_WRITE = 438;
416417
fs.chmod(options.socket, READ_WRITE, (fsError) => {
417418
if (fsError) throw fsError;
419+
420+
const uri = createDomain(options, server.listeningApp) + suffix;
418421
reportReadiness(uri, options);
419422
});
420423
});
421424
} else {
422425
server.listen(options.port, options.host, (err) => {
423426
if (err) throw err;
424427
if (options.bonjour) broadcastZeroconf(options);
428+
429+
const uri = createDomain(options, server.listeningApp) + suffix;
425430
reportReadiness(uri, options);
426431
});
427432
}

lib/util/createDomain.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
const url = require('url');
44
const internalIp = require('internal-ip');
55

6-
module.exports = function createDomain(options) {
6+
7+
module.exports = function createDomain(options, listeningApp) {
78
const protocol = options.https ? 'https' : 'http';
9+
const appPort = listeningApp ? listeningApp.address().port : 0;
10+
const port = options.socket ? 0 : appPort;
11+
const hostname = options.useLocalIp ? internalIp.v4() : options.host;
812

913
// the formatted domain (url without path) of the webpack server
1014
return options.public ? `${protocol}://${options.public}` : url.format({
1115
protocol,
12-
hostname: options.useLocalIp ? internalIp.v4() : options.host,
13-
port: options.socket ? 0 : options.port.toString()
16+
hostname,
17+
port
1418
});
1519
};

0 commit comments

Comments
 (0)