Skip to content

Commit

Permalink
Beaufity output of eject.js script (facebook#769)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
azakordonets authored and feiqitian committed Oct 25, 2016
1 parent 3c4a571 commit ed2f523
Showing 1 changed file with 30 additions and 14 deletions.
44 changes: 30 additions & 14 deletions packages/react-scripts/scripts/eject.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,20 @@ var path = require('path');
var prompt = require('react-dev-utils/prompt');
var rimrafSync = require('rimraf').sync;
var spawnSync = require('cross-spawn').sync;
var chalk = require('chalk');
var green = chalk.green;
var cyan = chalk.cyan;

prompt(
'Are you sure you want to eject? This action is permanent.',
false
).then(shouldEject => {
if (!shouldEject) {
console.log('Close one! Eject aborted.');
console.log(cyan('Close one! Eject aborted.'));
process.exit(1);
}

console.log('Ejecting...');
console.log();

var ownPath = path.join(__dirname, '..');
var appPath = path.join(ownPath, '..', '..');
Expand Down Expand Up @@ -59,8 +61,10 @@ prompt(
fs.mkdirSync(path.join(appPath, 'config', 'jest'));
fs.mkdirSync(path.join(appPath, 'scripts'));

console.log();
console.log('Copying files to ' + cyan(appPath));
files.forEach(function(file) {
console.log('Copying ' + file + ' to ' + appPath);
console.log(' Copying ' + cyan(file));
var content = fs
.readFileSync(path.join(ownPath, file), 'utf8')
// Remove dead code from .js files on eject
Expand All @@ -77,53 +81,65 @@ prompt(
var babelConfig = JSON.parse(fs.readFileSync(path.join(ownPath, '.babelrc'), 'utf8'));
var eslintConfig = JSON.parse(fs.readFileSync(path.join(ownPath, '.eslintrc'), 'utf8'));

console.log(cyan('Updating dependencies...'));
var ownPackageName = ownPackage.name;
console.log('Removing dependency: ' + ownPackageName);
console.log(' Removing dependency: ' + cyan(ownPackageName));
delete appPackage.devDependencies[ownPackageName];

Object.keys(ownPackage.dependencies).forEach(function (key) {
// For some reason optionalDependencies end up in dependencies after install
if (ownPackage.optionalDependencies[key]) {
return;
}
console.log('Adding dependency: ' + key);
console.log(' Adding dependency: ' + cyan(key));
appPackage.devDependencies[key] = ownPackage.dependencies[key];
});

console.log('Updating scripts');
console.log();
console.log(cyan('Updating scripts...'));
delete appPackage.scripts['eject'];
Object.keys(appPackage.scripts).forEach(function (key) {
appPackage.scripts[key] = appPackage.scripts[key]
.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
console.log(' Adding ' + cyan('Jest') + ' configuration');
appPackage.jest = createJestConfig(
filePath => path.join('<rootDir>', filePath),
null,
true
);

// Add Babel config

console.log(' Adding ' + cyan('Babel') + ' preset');
appPackage.babel = babelConfig;

// Add ESlint config
console.log(' Adding ' + cyan('ESLint') +' configuration');
appPackage.eslintConfig = eslintConfig;

console.log('Writing package.json');
fs.writeFileSync(
path.join(appPath, 'package.json'),
JSON.stringify(appPackage, null, 2)
);
console.log();

console.log('Running npm install...');
console.log(cyan('Running npm install...'));
rimrafSync(ownPath);
spawnSync('npm', ['install'], {stdio: 'inherit'});
console.log('Ejected successfully!');
console.log(green('Ejected successfully!'));
console.log();

console.log('Please consider sharing why you ejected in this survey:');
console.log(' http://goo.gl/forms/Bi6CZjk1EqsdelXk1');
console.log();
});
console.log(green('Please consider sharing why you ejected in this survey:'));
console.log(green(' http://goo.gl/forms/Bi6CZjk1EqsdelXk1'));
console.log()
})

0 comments on commit ed2f523

Please sign in to comment.