mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-06-16 02:14:50 +08:00
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
This commit is contained in:
committed by
Joe Haddad
parent
11851ee761
commit
36d86b9df8
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
# ******************************************************************************
|
||||
|
||||
Reference in New Issue
Block a user