From 427b4680864e5d14f2e4f857c0e697675cd8434e Mon Sep 17 00:00:00 2001 From: xsbchen Date: Wed, 10 Apr 2019 17:48:53 +0800 Subject: [PATCH 1/2] just use portfinder when user not set port --- packages/@vue/cli-service/lib/commands/serve.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/@vue/cli-service/lib/commands/serve.js b/packages/@vue/cli-service/lib/commands/serve.js index 0852171c5b..8a9da103dc 100644 --- a/packages/@vue/cli-service/lib/commands/serve.js +++ b/packages/@vue/cli-service/lib/commands/serve.js @@ -76,8 +76,12 @@ module.exports = (api, options) => { const useHttps = args.https || projectDevServerOptions.https || defaults.https const protocol = useHttps ? 'https' : 'http' const host = args.host || process.env.HOST || projectDevServerOptions.host || defaults.host - portfinder.basePort = args.port || process.env.PORT || projectDevServerOptions.port || defaults.port - const port = await portfinder.getPortPromise() + let port = args.port || process.env.PORT || projectDevServerOptions.port + // just use portfinder when user not set port + if (!port) { + portfinder.basePort = defaults.port + port = await portfinder.getPortPromise() + } const rawPublicUrl = args.public || projectDevServerOptions.public const publicUrl = rawPublicUrl ? /^[a-zA-Z]+:\/\//.test(rawPublicUrl) From c883eb18529897b86810e7b5ee4f08bdc5b22412 Mon Sep 17 00:00:00 2001 From: xsbchen Date: Wed, 10 Apr 2019 19:47:56 +0800 Subject: [PATCH 2/2] feat(serve): add error handler & console message --- packages/@vue/cli-service/lib/commands/serve.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/packages/@vue/cli-service/lib/commands/serve.js b/packages/@vue/cli-service/lib/commands/serve.js index 8a9da103dc..81f319e36b 100644 --- a/packages/@vue/cli-service/lib/commands/serve.js +++ b/packages/@vue/cli-service/lib/commands/serve.js @@ -1,5 +1,6 @@ const { info, + error, hasProjectYarn, openBrowser, IpcMessenger @@ -77,8 +78,10 @@ module.exports = (api, options) => { const protocol = useHttps ? 'https' : 'http' const host = args.host || process.env.HOST || projectDevServerOptions.host || defaults.host let port = args.port || process.env.PORT || projectDevServerOptions.port + let hasUserGivenPort = true // just use portfinder when user not set port if (!port) { + hasUserGivenPort = false portfinder.basePort = defaults.port port = await portfinder.getPortPromise() } @@ -280,6 +283,14 @@ module.exports = (api, options) => { if (err) { reject(err) } + }).on('error', err => { + if (hasUserGivenPort && err.code === 'EADDRINUSE') { + console.log() + error(`Address already in use ${err.address}:${err.port}.`) + info(`You can change the port by ${chalk.cyan('--port')} option or ${chalk.cyan('vue.config.js')} or ${chalk.cyan('package.json')}.`) + process.exit(1) + } + reject(err) }) }) })