diff --git a/packages/react-scripts/scripts/build.js b/packages/react-scripts/scripts/build.js
index 7c953c3544e1bb1b4a0337cf47b43c01ca7cf378..e5272b3792a3ce96b3519f5823273bc6b37a0613 100644
--- a/packages/react-scripts/scripts/build.js
+++ b/packages/react-scripts/scripts/build.js
@@ -133,7 +133,16 @@ function printErrors(summary, errors) {
 // Create the production build and print the deployment instructions.
 function build(previousSizeMap) {
   console.log('Creating an optimized production build...');
-  webpack(config).run((err, stats) => {
+
+  var compiler;
+  try {
+    compiler = webpack(config);
+  } catch (err) {
+    printErrors('Failed to compile.', [err]);
+    process.exit(1);
+  }
+
+  compiler.run((err, stats) => {
     if (err) {
       printErrors('Failed to compile.', [err]);
       process.exit(1);
diff --git a/packages/react-scripts/scripts/start.js b/packages/react-scripts/scripts/start.js
index 443cd449a3d899972fe0774c3611a47d1e810a67..913ece9eb6c49597971e87474490bdf0e20cb72d 100644
--- a/packages/react-scripts/scripts/start.js
+++ b/packages/react-scripts/scripts/start.js
@@ -63,7 +63,15 @@ if (isSmokeTest) {
 function setupCompiler(host, port, protocol) {
   // "Compiler" is a low-level interface to Webpack.
   // It lets us listen to some events and provide our own custom messages.
-  compiler = webpack(config, handleCompile);
+  try {
+    compiler = webpack(config, handleCompile);
+  } catch (err) {
+    console.log(chalk.red('Failed to compile.'));
+    console.log();
+    console.log(err.message || err);
+    console.log();
+    process.exit(1);
+  }
 
   // "invalid" event fires when you have changed a file, and Webpack is
   // recompiling a bundle. WebpackDevServer takes care to pause serving the