diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js
index 6b7dce9b6be72389a475f26761837a5e3724d042..d5afee43b8f9180c3494edf1677477dbffc07590 100755
--- a/packages/create-react-app/index.js
+++ b/packages/create-react-app/index.js
@@ -182,7 +182,30 @@ function run(root, appName, version, verbose, originalDirectory, template) {
 
   install(allDependencies, verbose, function(code, command, args) {
     if (code !== 0) {
-      console.error(chalk.cyan(command + ' ' + args.join(' ')) + ' failed');
+      console.log();
+      console.error('Aborting installation.', chalk.cyan(command + ' ' + args.join(' ')), 'has failed.');
+      // On 'exit' we will delete these files from target directory.
+      var knownGeneratedFiles = [
+        'package.json', 'npm-debug.log', 'yarn-error.log', 'yarn-debug.log', 'node_modules'
+      ];
+      var currentFiles = fs.readdirSync(path.join(root));
+      currentFiles.forEach(function (file) {
+        knownGeneratedFiles.forEach(function (fileToMatch) {
+          // This will catch `(npm-debug|yarn-error|yarn-debug).log*` files
+          // and the rest of knownGeneratedFiles.
+          if ((fileToMatch.match(/.log/g) && file.indexOf(fileToMatch) === 0) || file === fileToMatch) {
+            console.log('Deleting generated file...', chalk.cyan(file));
+            fs.removeSync(path.join(root, file));
+          }
+        });
+      });
+      var remainingFiles = fs.readdirSync(path.join(root));
+      if (!remainingFiles.length) {
+        // Delete target folder if empty
+        console.log('Deleting', chalk.cyan(appName + '/'), 'from', chalk.cyan(path.resolve(root, '..')));
+        fs.removeSync(path.join(root));
+      }
+      console.log('Done.');
       process.exit(1);
     }
 
diff --git a/tasks/e2e-installs.sh b/tasks/e2e-installs.sh
index d3427f8c8846bbb7827e6c79f34abf10807eb4e9..ac25da7e609b6164cdbc9d82ea720db6183cc3f3 100755
--- a/tasks/e2e-installs.sh
+++ b/tasks/e2e-installs.sh
@@ -119,6 +119,32 @@ cd test-app-fork
 # Check corresponding scripts version is installed.
 exists node_modules/react-scripts-fork
 
+# ******************************************************************************
+# Test project folder is deleted on failing package installation
+# ******************************************************************************
+
+cd $temp_app_path
+# we will install a non-existing package to simulate a failed installataion.
+create_react_app --scripts-version=`date +%s` test-app-should-not-exist || true
+# confirm that the project folder was deleted
+test ! -d test-app-should-not-exist
+
+# ******************************************************************************
+# Test project folder is not deleted when creating app over existing folder
+# ******************************************************************************
+
+cd $temp_app_path
+mkdir test-app-should-remain
+echo '## Hello' > ./test-app-should-remain/README.md
+# we will install a non-existing package to simulate a failed installataion.
+create_react_app --scripts-version=`date +%s` test-app-should-remain || true
+# confirm the file exist
+test -e test-app-should-remain/README.md
+# confirm only README.md is the only file in the directory
+if [ "$(ls -1 ./test-app-should-remain | wc -l | tr -d '[:space:]')" != "1" ]; then
+  false
+fi
+
 # ******************************************************************************
 # Test nested folder path as the project name
 # ******************************************************************************