diff --git a/packages/react-dev-utils/crossSpawn.js b/packages/react-dev-utils/crossSpawn.js
new file mode 100644
index 0000000000000000000000000000000000000000..8424dcf090e8590c493aa6c2072b2911dc04b941
--- /dev/null
+++ b/packages/react-dev-utils/crossSpawn.js
@@ -0,0 +1,14 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+'use strict';
+
+var crossSpawn = require('cross-spawn');
+
+module.exports = crossSpawn;
diff --git a/packages/react-dev-utils/package.json b/packages/react-dev-utils/package.json
index 16eb847e8f5a6923291247a53c8254ac3fc0a6ac..ccd160971e13e609b8765211df1de76ac2b9ea06 100644
--- a/packages/react-dev-utils/package.json
+++ b/packages/react-dev-utils/package.json
@@ -15,6 +15,7 @@
     "checkRequiredFiles.js",
     "clearConsole.js",
     "crashOverlay.js",
+    "crossSpawn.js",
     "eslintFormatter.js",
     "FileSizeReporter.js",
     "formatWebpackMessages.js",
diff --git a/packages/react-scripts/bin/react-scripts.js b/packages/react-scripts/bin/react-scripts.js
index 7bf1e7503e281c2605fb13ea3c7b43b91caeac2b..cb52fe71b091d47acd6c2985cdd05104da895f13 100755
--- a/packages/react-scripts/bin/react-scripts.js
+++ b/packages/react-scripts/bin/react-scripts.js
@@ -10,7 +10,7 @@
 
 'use strict';
 
-const spawn = require('cross-spawn');
+const spawn = require('react-dev-utils/crossSpawn');
 const script = process.argv[2];
 const args = process.argv.slice(3);
 
diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json
index 633b221ba9676281aea016e7c6db140ade12a9ee..3b6692fd088a686ff8e6feaacf25179a8a0d9a3c 100644
--- a/packages/react-scripts/package.json
+++ b/packages/react-scripts/package.json
@@ -30,8 +30,6 @@
     "babel-runtime": "6.23.0",
     "case-sensitive-paths-webpack-plugin": "1.1.4",
     "chalk": "1.1.3",
-    "connect-history-api-fallback": "1.3.0",
-    "cross-spawn": "4.0.2",
     "css-loader": "0.28.1",
     "dotenv": "4.0.0",
     "eslint": "3.19.0",
diff --git a/packages/react-scripts/scripts/eject.js b/packages/react-scripts/scripts/eject.js
index 796e6f63a0569f7c33ca01b1e074dd84b8b5b63d..c771e075d3527c44f8d147f206fcd88685ea230f 100644
--- a/packages/react-scripts/scripts/eject.js
+++ b/packages/react-scripts/scripts/eject.js
@@ -19,11 +19,11 @@ process.on('unhandledRejection', err => {
 const fs = require('fs-extra');
 const path = require('path');
 const execSync = require('child_process').execSync;
-const spawnSync = require('cross-spawn').sync;
 const chalk = require('chalk');
 const paths = require('../config/paths');
 const createJestConfig = require('./utils/createJestConfig');
 const inquirer = require('react-dev-utils/inquirer');
+const spawnSync = require('react-dev-utils/crossSpawn').sync;
 
 const green = chalk.green;
 const cyan = chalk.cyan;
diff --git a/packages/react-scripts/scripts/init.js b/packages/react-scripts/scripts/init.js
index 87d87e621e7274529363225a844d38c9e2e685a1..a50704d1cf7e0405dd2525571de8f7c4cb94610d 100644
--- a/packages/react-scripts/scripts/init.js
+++ b/packages/react-scripts/scripts/init.js
@@ -18,8 +18,8 @@ process.on('unhandledRejection', err => {
 
 const fs = require('fs-extra');
 const path = require('path');
-const spawn = require('cross-spawn');
 const chalk = require('chalk');
+const spawn = require('react-dev-utils/crossSpawn');
 
 module.exports = function(
   appPath,