Commit 6876c402 authored by Vicente Jr Yuchitcho's avatar Vicente Jr Yuchitcho Committed by Joe Haddad
Browse files

Gracefully handle initial installation error (#1512)

* Gracefully handle initial installation error

* Print out message when problem occurs
* Delete project folder on errors

* Fix directory deleting message

Resolves #1505 
parent 2288ddf3
Showing with 50 additions and 1 deletion
+50 -1
...@@ -182,7 +182,30 @@ function run(root, appName, version, verbose, originalDirectory, template) { ...@@ -182,7 +182,30 @@ function run(root, appName, version, verbose, originalDirectory, template) {
install(allDependencies, verbose, function(code, command, args) { install(allDependencies, verbose, function(code, command, args) {
if (code !== 0) { 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); process.exit(1);
} }
......
...@@ -119,6 +119,32 @@ cd test-app-fork ...@@ -119,6 +119,32 @@ cd test-app-fork
# Check corresponding scripts version is installed. # Check corresponding scripts version is installed.
exists node_modules/react-scripts-fork 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 # Test nested folder path as the project name
# ****************************************************************************** # ******************************************************************************
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment