From cfbf229329a1474bce1f68bcef67125d2a5c9c8c Mon Sep 17 00:00:00 2001 From: Joel Denning Date: Tue, 30 Jul 2019 01:46:00 -0600 Subject: [PATCH] fix(server): set port before instantiating server (#2143) --- bin/webpack-dev-server.js | 16 ++++------------ lib/utils/processOptions.js | 17 ++++++++++++++++- test/cli/cli.test.js | 11 ++++++++++- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/bin/webpack-dev-server.js b/bin/webpack-dev-server.js index 26de7d4ba6..7c3456f5d3 100755 --- a/bin/webpack-dev-server.js +++ b/bin/webpack-dev-server.js @@ -15,7 +15,6 @@ const setupExitSignals = require('../lib/utils/setupExitSignals'); const colors = require('../lib/utils/colors'); const processOptions = require('../lib/utils/processOptions'); const createLogger = require('../lib/utils/createLogger'); -const findPort = require('../lib/utils/findPort'); const getVersions = require('../lib/utils/getVersions'); const options = require('./options'); @@ -148,18 +147,11 @@ function startDevServer(config, options) { }); }); } else { - findPort(options.port) - .then((port) => { - options.port = port; - server.listen(options.port, options.host, (err) => { - if (err) { - throw err; - } - }); - }) - .catch((err) => { + server.listen(options.port, options.host, (err) => { + if (err) { throw err; - }); + } + }); } } diff --git a/lib/utils/processOptions.js b/lib/utils/processOptions.js index 23da69b430..ba224ed690 100644 --- a/lib/utils/processOptions.js +++ b/lib/utils/processOptions.js @@ -2,6 +2,7 @@ const createConfig = require('./createConfig'); const defaultPort = require('./defaultPort'); +const findPort = require('./findPort'); function processOptions(config, argv, callback) { // processOptions {Promise} @@ -23,7 +24,21 @@ function processOptions(config, argv, callback) { // we should use portfinder. const options = createConfig(config, argv, { port: defaultPort }); - callback(config, options); + if (options.socket) { + callback(config, options); + } else { + findPort(options.port) + .then((port) => { + options.port = port; + callback(config, options); + }) + .catch((err) => { + // eslint-disable-next-line no-console + console.error(err.stack || err); + // eslint-disable-next-line no-process-exit + process.exit(1); + }); + } } module.exports = processOptions; diff --git a/test/cli/cli.test.js b/test/cli/cli.test.js index 91e82b7bc6..b7a70bc6f1 100644 --- a/test/cli/cli.test.js +++ b/test/cli/cli.test.js @@ -78,13 +78,22 @@ describe('CLI', () => { testBin('--sockPath /mysockPath') .then((output) => { expect( - output.stdout.includes('http://localhost&sockPath=/mysockPath') + /http:\/\/localhost:[0-9]+&sockPath=\/mysockPath/.test(output.stdout) ).toEqual(true); done(); }) .catch(done); }); + it('unspecified port', (done) => { + testBin('') + .then((output) => { + expect(/http:\/\/localhost:[0-9]+/.test(output.stdout)).toEqual(true); + done(); + }) + .catch(done); + }); + it('--color', (done) => { testBin('--color') .then((output) => {