From f912a5952c337e4671549b90a182d19c1763ea3f Mon Sep 17 00:00:00 2001 From: Adi Sahar Date: Fri, 8 Sep 2017 17:43:32 +0300 Subject: [PATCH 1/4] Add dynamic port allocation --- template/build/dev-server.js | 20 ++++++++++++++------ template/package.json | 3 ++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/template/build/dev-server.js b/template/build/dev-server.js index e3c7b55708..122f017e89 100644 --- a/template/build/dev-server.js +++ b/template/build/dev-server.js @@ -72,14 +72,22 @@ var readyPromise = new Promise(resolve => { _resolve = resolve }) +var server +var portfinder = require('portfinder') +portfinder.basePort = port + console.log('> Starting dev server...') devMiddleware.waitUntilValid(() => { - console.log('> Listening at ' + uri + '\n') - // when env is testing, don't need open it - if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { - opn(uri) - } - _resolve() + portfinder.getPort((err, port) => { + var uri = 'http://localhost:' + port + console.log('> Listening at ' + uri + '\n') + // when env is testing, don't need open it + if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { + opn(uri) + } + server = app.listen(port) + _resolve() + }) }) var server = app.listen(port) diff --git a/template/package.json b/template/package.json index 7840f38186..c67b47ca7d 100644 --- a/template/package.json +++ b/template/package.json @@ -95,7 +95,8 @@ "webpack": "^2.6.1", "webpack-dev-middleware": "^1.10.0", "webpack-hot-middleware": "^2.18.0", - "webpack-merge": "^4.1.0" + "webpack-merge": "^4.1.0", + "portfinder": "^1.0.13" }, "engines": { "node": ">= 4.0.0", From be9f547df9806e3724c550f7426eeebbc8699d5e Mon Sep 17 00:00:00 2001 From: Adi Sahar Date: Fri, 8 Sep 2017 17:46:41 +0300 Subject: [PATCH 2/4] Add error handling to port allocation --- template/build/dev-server.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/template/build/dev-server.js b/template/build/dev-server.js index 122f017e89..e1b969b2c3 100644 --- a/template/build/dev-server.js +++ b/template/build/dev-server.js @@ -68,8 +68,10 @@ app.use(staticPath, express.static('./static')) var uri = 'http://localhost:' + port var _resolve -var readyPromise = new Promise(resolve => { +var _reject +var readyPromise = new Promise((resolve, reject) => { _resolve = resolve + _reject = reject }) var server @@ -79,6 +81,9 @@ portfinder.basePort = port console.log('> Starting dev server...') devMiddleware.waitUntilValid(() => { portfinder.getPort((err, port) => { + if (err) { + _reject(err) + } var uri = 'http://localhost:' + port console.log('> Listening at ' + uri + '\n') // when env is testing, don't need open it From f538e19416250060a2aea9e898e510071d8e4b76 Mon Sep 17 00:00:00 2001 From: Adi Sahar Date: Fri, 8 Sep 2017 18:02:12 +0300 Subject: [PATCH 3/4] Remove forgotten listen statement from dev-server.js --- template/build/dev-server.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/template/build/dev-server.js b/template/build/dev-server.js index e1b969b2c3..51d870dab5 100644 --- a/template/build/dev-server.js +++ b/template/build/dev-server.js @@ -95,8 +95,6 @@ devMiddleware.waitUntilValid(() => { }) }) -var server = app.listen(port) - module.exports = { ready: readyPromise, close: () => { From bce2fdd78ea01c90dd44dd01d0fd706e97f00241 Mon Sep 17 00:00:00 2001 From: Adi Sahar Date: Sat, 9 Sep 2017 18:26:36 +0300 Subject: [PATCH 4/4] Set dynamically allocated port to environment variable `PORT` --- template/build/dev-server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/template/build/dev-server.js b/template/build/dev-server.js index 51d870dab5..dc348f5a85 100644 --- a/template/build/dev-server.js +++ b/template/build/dev-server.js @@ -84,6 +84,7 @@ devMiddleware.waitUntilValid(() => { if (err) { _reject(err) } + process.env.PORT = port var uri = 'http://localhost:' + port console.log('> Listening at ' + uri + '\n') // when env is testing, don't need open it