From e280254d7261befec9add84c13b9304b4d399f56 Mon Sep 17 00:00:00 2001
From: Dan Abramov <dan.abramov@gmail.com>
Date: Tue, 16 May 2017 16:57:45 +0100
Subject: [PATCH] Handle errors from port detector (#2182)

---
 packages/react-scripts/package.json     |  2 +-
 packages/react-scripts/scripts/start.js | 61 ++++++++++++++-----------
 2 files changed, 36 insertions(+), 27 deletions(-)

diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json
index 76555a6a0..eaab334d4 100644
--- a/packages/react-scripts/package.json
+++ b/packages/react-scripts/package.json
@@ -21,7 +21,7 @@
     "react-scripts": "./bin/react-scripts.js"
   },
   "dependencies": {
-    "@timer/detect-port": "1.1.2",
+    "@timer/detect-port": "1.1.3",
     "address": "1.0.1",
     "autoprefixer": "7.1.0",
     "babel-core": "6.24.1",
diff --git a/packages/react-scripts/scripts/start.js b/packages/react-scripts/scripts/start.js
index fb53543aa..858e39cdc 100644
--- a/packages/react-scripts/scripts/start.js
+++ b/packages/react-scripts/scripts/start.js
@@ -140,33 +140,42 @@ function run(port) {
 
 // We attempt to use the default port but if it is busy, we offer the user to
 // run on a different port. `detect()` Promise resolves to the next free port.
-detect(DEFAULT_PORT, HOST).then(port => {
-  if (port === DEFAULT_PORT) {
-    run(port);
-    return;
-  }
+detect(DEFAULT_PORT, HOST).then(
+  port => {
+    if (port === DEFAULT_PORT) {
+      run(port);
+      return;
+    }
 
-  if (isInteractive) {
-    clearConsole();
-    const existingProcess = getProcessForPort(DEFAULT_PORT);
-    const question = {
-      type: 'confirm',
-      name: 'shouldChangePort',
-      message: chalk.yellow(
-        `Something is already running on port ${DEFAULT_PORT}.` +
-          `${existingProcess ? ` Probably:\n  ${existingProcess}` : ''}`
-      ) + '\n\nWould you like to run the app on another port instead?',
-      default: true,
-    };
-
-    inquirer.prompt(question).then(answer => {
-      if (answer.shouldChangePort) {
-        run(port);
-      }
-    });
-  } else {
+    if (isInteractive) {
+      clearConsole();
+      const existingProcess = getProcessForPort(DEFAULT_PORT);
+      const question = {
+        type: 'confirm',
+        name: 'shouldChangePort',
+        message: chalk.yellow(
+          `Something is already running on port ${DEFAULT_PORT}.` +
+            `${existingProcess ? ` Probably:\n  ${existingProcess}` : ''}`
+        ) + '\n\nWould you like to run the app on another port instead?',
+        default: true,
+      };
+
+      inquirer.prompt(question).then(answer => {
+        if (answer.shouldChangePort) {
+          run(port);
+        }
+      });
+    } else {
+      console.log(
+        chalk.red(`Something is already running on port ${DEFAULT_PORT}.`)
+      );
+    }
+  },
+  err => {
     console.log(
-      chalk.red(`Something is already running on port ${DEFAULT_PORT}.`)
+      chalk.red(`Could not find an open port at ${chalk.bold(HOST)}.`)
     );
+    console.log('Network error message: ' + err.message || err);
+    console.log();
   }
-});
+);
-- 
GitLab