Commit 27e76beb authored by Andrew Zakordonets's avatar Andrew Zakordonets Committed by Dan Abramov
Browse files

Beaufity output of eject.js script (#769)

* Beaufity output of eject.js script

* change formatting of the eject.js output and move colors to cyan

* change message about file copy

* add missing three dots to some statements in eject.js script

* change color of "copying files" line and do not repeat copy path anymore in log

* fix merge conflict

* Remove yellow color from "Removing dependency" line

* changing color to "Adding dependency" line

* Add line that outputs which react script is getting replaced by similar node script

* remove not used anymore colors

* add console line about updating Jest configs

* fix typo

* change formatting of replacing script output in eject.js

* remove "Writing package.json" file console output

* make quotes cyan in "Replacing script" console output

* update console log output for Jest, Babel, ESLint update and group them under one statement

* Style nits
parent 92d9cda9
No related merge requests found
Showing with 30 additions and 14 deletions
+30 -14
...@@ -13,18 +13,20 @@ var path = require('path'); ...@@ -13,18 +13,20 @@ var path = require('path');
var prompt = require('react-dev-utils/prompt'); var prompt = require('react-dev-utils/prompt');
var rimrafSync = require('rimraf').sync; var rimrafSync = require('rimraf').sync;
var spawnSync = require('cross-spawn').sync; var spawnSync = require('cross-spawn').sync;
var chalk = require('chalk');
var green = chalk.green;
var cyan = chalk.cyan;
prompt( prompt(
'Are you sure you want to eject? This action is permanent.', 'Are you sure you want to eject? This action is permanent.',
false false
).then(shouldEject => { ).then(shouldEject => {
if (!shouldEject) { if (!shouldEject) {
console.log('Close one! Eject aborted.'); console.log(cyan('Close one! Eject aborted.'));
process.exit(1); process.exit(1);
} }
console.log('Ejecting...'); console.log('Ejecting...');
console.log();
var ownPath = path.join(__dirname, '..'); var ownPath = path.join(__dirname, '..');
var appPath = path.join(ownPath, '..', '..'); var appPath = path.join(ownPath, '..', '..');
...@@ -59,8 +61,10 @@ prompt( ...@@ -59,8 +61,10 @@ prompt(
fs.mkdirSync(path.join(appPath, 'config', 'jest')); fs.mkdirSync(path.join(appPath, 'config', 'jest'));
fs.mkdirSync(path.join(appPath, 'scripts')); fs.mkdirSync(path.join(appPath, 'scripts'));
console.log();
console.log('Copying files to ' + cyan(appPath));
files.forEach(function(file) { files.forEach(function(file) {
console.log('Copying ' + file + ' to ' + appPath); console.log(' Copying ' + cyan(file));
var content = fs var content = fs
.readFileSync(path.join(ownPath, file), 'utf8') .readFileSync(path.join(ownPath, file), 'utf8')
// Remove dead code from .js files on eject // Remove dead code from .js files on eject
...@@ -77,8 +81,9 @@ prompt( ...@@ -77,8 +81,9 @@ prompt(
var babelConfig = JSON.parse(fs.readFileSync(path.join(ownPath, '.babelrc'), 'utf8')); var babelConfig = JSON.parse(fs.readFileSync(path.join(ownPath, '.babelrc'), 'utf8'));
var eslintConfig = JSON.parse(fs.readFileSync(path.join(ownPath, '.eslintrc'), 'utf8')); var eslintConfig = JSON.parse(fs.readFileSync(path.join(ownPath, '.eslintrc'), 'utf8'));
console.log(cyan('Updating dependencies...'));
var ownPackageName = ownPackage.name; var ownPackageName = ownPackage.name;
console.log('Removing dependency: ' + ownPackageName); console.log(' Removing dependency: ' + cyan(ownPackageName));
delete appPackage.devDependencies[ownPackageName]; delete appPackage.devDependencies[ownPackageName];
Object.keys(ownPackage.dependencies).forEach(function (key) { Object.keys(ownPackage.dependencies).forEach(function (key) {
...@@ -86,18 +91,27 @@ prompt( ...@@ -86,18 +91,27 @@ prompt(
if (ownPackage.optionalDependencies[key]) { if (ownPackage.optionalDependencies[key]) {
return; return;
} }
console.log('Adding dependency: ' + key); console.log(' Adding dependency: ' + cyan(key));
appPackage.devDependencies[key] = ownPackage.dependencies[key]; appPackage.devDependencies[key] = ownPackage.dependencies[key];
}); });
console.log();
console.log('Updating scripts'); console.log(cyan('Updating scripts...'));
delete appPackage.scripts['eject']; delete appPackage.scripts['eject'];
Object.keys(appPackage.scripts).forEach(function (key) { Object.keys(appPackage.scripts).forEach(function (key) {
appPackage.scripts[key] = appPackage.scripts[key] appPackage.scripts[key] = appPackage.scripts[key]
.replace(/react-scripts (\w+)/g, 'node scripts/$1.js'); .replace(/react-scripts (\w+)/g, 'node scripts/$1.js');
console.log(
' Replacing ' +
cyan('\"react-scripts ' + key + '\"') +
' with ' +
cyan('\"' + appPackage.scripts[key] + '\"')
);
}); });
console.log();
console.log(cyan('Adding configuration to ') + 'package.json' + cyan('...'));
// Add Jest config // Add Jest config
console.log(' Adding ' + cyan('Jest') + ' configuration');
appPackage.jest = createJestConfig( appPackage.jest = createJestConfig(
filePath => path.join('<rootDir>', filePath), filePath => path.join('<rootDir>', filePath),
null, null,
...@@ -105,25 +119,27 @@ prompt( ...@@ -105,25 +119,27 @@ prompt(
); );
// Add Babel config // Add Babel config
console.log(' Adding ' + cyan('Babel') + ' preset');
appPackage.babel = babelConfig; appPackage.babel = babelConfig;
// Add ESlint config // Add ESlint config
console.log(' Adding ' + cyan('ESLint') +' configuration');
appPackage.eslintConfig = eslintConfig; appPackage.eslintConfig = eslintConfig;
console.log('Writing package.json');
fs.writeFileSync( fs.writeFileSync(
path.join(appPath, 'package.json'), path.join(appPath, 'package.json'),
JSON.stringify(appPackage, null, 2) JSON.stringify(appPackage, null, 2)
); );
console.log(); console.log();
console.log('Running npm install...'); console.log(cyan('Running npm install...'));
rimrafSync(ownPath); rimrafSync(ownPath);
spawnSync('npm', ['install'], {stdio: 'inherit'}); spawnSync('npm', ['install'], {stdio: 'inherit'});
console.log('Ejected successfully!'); console.log(green('Ejected successfully!'));
console.log(); console.log();
console.log('Please consider sharing why you ejected in this survey:'); console.log(green('Please consider sharing why you ejected in this survey:'));
console.log(' http://goo.gl/forms/Bi6CZjk1EqsdelXk1'); console.log(green(' http://goo.gl/forms/Bi6CZjk1EqsdelXk1'));
console.log(); console.log()
}); })
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