mirror of
https://github.com/zhigang1992/create-react-app.git
synced 2026-05-12 19:58:54 +08:00
update to modern code style (#1738)
* mv create-react-app/index.js -> create-react-app/creteReactApp.js * update to modern code style * var -> cosnt * set trailing-coma to es5 for prettier
This commit is contained in:
committed by
Dan Abramov
parent
43873dc9b8
commit
fe7b5c212b
138
packages/react-scripts/scripts/eject.js
vendored
138
packages/react-scripts/scripts/eject.js
vendored
@@ -9,16 +9,16 @@
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs-extra');
|
||||
var path = require('path');
|
||||
var spawnSync = require('cross-spawn').sync;
|
||||
var chalk = require('chalk');
|
||||
var prompt = require('react-dev-utils/prompt');
|
||||
var paths = require('../config/paths');
|
||||
var createJestConfig = require('./utils/createJestConfig');
|
||||
const fs = require('fs-extra');
|
||||
const path = require('path');
|
||||
const spawnSync = require('cross-spawn').sync;
|
||||
const chalk = require('chalk');
|
||||
const prompt = require('react-dev-utils/prompt');
|
||||
const paths = require('../config/paths');
|
||||
const createJestConfig = require('./utils/createJestConfig');
|
||||
|
||||
var green = chalk.green;
|
||||
var cyan = chalk.cyan;
|
||||
const green = chalk.green;
|
||||
const cyan = chalk.cyan;
|
||||
|
||||
prompt(
|
||||
'Are you sure you want to eject? This action is permanent.',
|
||||
@@ -31,52 +31,51 @@ prompt(
|
||||
|
||||
console.log('Ejecting...');
|
||||
|
||||
var ownPath = paths.ownPath;
|
||||
var appPath = paths.appPath;
|
||||
const ownPath = paths.ownPath;
|
||||
const appPath = paths.appPath;
|
||||
|
||||
function verifyAbsent(file) {
|
||||
if (fs.existsSync(path.join(appPath, file))) {
|
||||
console.error(
|
||||
'`' + file + '` already exists in your app folder. We cannot ' +
|
||||
'continue as you would lose all the changes in that file or directory. ' +
|
||||
'Please move or delete it (maybe make a copy for backup) and run this ' +
|
||||
'command again.'
|
||||
`\`${file}\` already exists in your app folder. We cannot ` +
|
||||
'continue as you would lose all the changes in that file or directory. ' +
|
||||
'Please move or delete it (maybe make a copy for backup) and run this ' +
|
||||
'command again.'
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
var folders = [
|
||||
'config',
|
||||
'config/jest',
|
||||
'scripts',
|
||||
'scripts/utils',
|
||||
];
|
||||
const folders = ['config', 'config/jest', 'scripts', 'scripts/utils'];
|
||||
|
||||
// Make shallow array of files paths
|
||||
var files = folders.reduce(function (files, folder) {
|
||||
return files.concat(
|
||||
fs.readdirSync(path.join(ownPath, folder))
|
||||
// set full path
|
||||
.map(file => path.join(ownPath, folder, file))
|
||||
// omit dirs from file list
|
||||
.filter(file => fs.lstatSync(file).isFile())
|
||||
);
|
||||
}, []);
|
||||
const files = folders.reduce(
|
||||
(files, folder) => {
|
||||
return files.concat(
|
||||
fs
|
||||
.readdirSync(path.join(ownPath, folder))
|
||||
// set full path
|
||||
.map(file => path.join(ownPath, folder, file))
|
||||
// omit dirs from file list
|
||||
.filter(file => fs.lstatSync(file).isFile())
|
||||
);
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
// Ensure that the app folder is clean and we won't override any files
|
||||
folders.forEach(verifyAbsent);
|
||||
files.forEach(verifyAbsent);
|
||||
|
||||
console.log();
|
||||
console.log(cyan('Copying files into ' + appPath));
|
||||
console.log(cyan(`Copying files into ${appPath}`));
|
||||
|
||||
folders.forEach(function(folder) {
|
||||
fs.mkdirSync(path.join(appPath, folder))
|
||||
folders.forEach(folder => {
|
||||
fs.mkdirSync(path.join(appPath, folder));
|
||||
});
|
||||
|
||||
files.forEach(function(file) {
|
||||
var content = fs.readFileSync(file, 'utf8');
|
||||
files.forEach(file => {
|
||||
let content = fs.readFileSync(file, 'utf8');
|
||||
|
||||
// Skip flagged files
|
||||
if (content.match(/\/\/ @remove-file-on-eject/)) {
|
||||
@@ -84,52 +83,61 @@ prompt(
|
||||
}
|
||||
content = content
|
||||
// Remove dead code from .js files on eject
|
||||
.replace(/\/\/ @remove-on-eject-begin([\s\S]*?)\/\/ @remove-on-eject-end/mg, '')
|
||||
.replace(
|
||||
/\/\/ @remove-on-eject-begin([\s\S]*?)\/\/ @remove-on-eject-end/mg,
|
||||
''
|
||||
)
|
||||
// Remove dead code from .applescript files on eject
|
||||
.replace(/-- @remove-on-eject-begin([\s\S]*?)-- @remove-on-eject-end/mg, '')
|
||||
.replace(
|
||||
/-- @remove-on-eject-begin([\s\S]*?)-- @remove-on-eject-end/mg,
|
||||
''
|
||||
)
|
||||
.trim() + '\n';
|
||||
console.log(' Adding ' + cyan(file.replace(ownPath, '')) + ' to the project');
|
||||
console.log(` Adding ${cyan(file.replace(ownPath, ''))} to the project`);
|
||||
fs.writeFileSync(file.replace(ownPath, appPath), content);
|
||||
});
|
||||
console.log();
|
||||
|
||||
var ownPackage = require(path.join(ownPath, 'package.json'));
|
||||
var appPackage = require(path.join(appPath, 'package.json'));
|
||||
var babelConfig = JSON.parse(fs.readFileSync(path.join(ownPath, 'babelrc'), 'utf8'));
|
||||
var eslintConfig = JSON.parse(fs.readFileSync(path.join(ownPath, 'eslintrc'), 'utf8'));
|
||||
const ownPackage = require(path.join(ownPath, 'package.json'));
|
||||
const appPackage = require(path.join(appPath, 'package.json'));
|
||||
const babelConfig = JSON.parse(
|
||||
fs.readFileSync(path.join(ownPath, '.babelrc'), 'utf8')
|
||||
);
|
||||
const eslintConfig = JSON.parse(
|
||||
fs.readFileSync(path.join(ownPath, '.eslintrc'), 'utf8')
|
||||
);
|
||||
|
||||
console.log(cyan('Updating the dependencies'));
|
||||
var ownPackageName = ownPackage.name;
|
||||
const ownPackageName = ownPackage.name;
|
||||
if (appPackage.devDependencies[ownPackageName]) {
|
||||
console.log(' Removing ' + cyan(ownPackageName) + ' from devDependencies');
|
||||
console.log(` Removing ${cyan(ownPackageName)} from devDependencies`);
|
||||
delete appPackage.devDependencies[ownPackageName];
|
||||
}
|
||||
if (appPackage.dependencies[ownPackageName]) {
|
||||
console.log(' Removing ' + cyan(ownPackageName) + ' from dependencies');
|
||||
console.log(` Removing ${cyan(ownPackageName)} from dependencies`);
|
||||
delete appPackage.dependencies[ownPackageName];
|
||||
}
|
||||
|
||||
Object.keys(ownPackage.dependencies).forEach(function (key) {
|
||||
Object.keys(ownPackage.dependencies).forEach(key => {
|
||||
// For some reason optionalDependencies end up in dependencies after install
|
||||
if (ownPackage.optionalDependencies[key]) {
|
||||
return;
|
||||
}
|
||||
console.log(' Adding ' + cyan(key) + ' to devDependencies');
|
||||
console.log(` Adding ${cyan(key)} to devDependencies`);
|
||||
appPackage.devDependencies[key] = ownPackage.dependencies[key];
|
||||
});
|
||||
console.log();
|
||||
console.log(cyan('Updating the scripts'));
|
||||
delete appPackage.scripts['eject'];
|
||||
Object.keys(appPackage.scripts).forEach(function (key) {
|
||||
Object.keys(ownPackage.bin).forEach(function (binKey) {
|
||||
var regex = new RegExp(binKey + ' (\\w+)', 'g');
|
||||
appPackage.scripts[key] = appPackage.scripts[key]
|
||||
.replace(regex, 'node scripts/$1.js');
|
||||
Object.keys(appPackage.scripts).forEach(key => {
|
||||
Object.keys(ownPackage.bin).forEach(binKey => {
|
||||
const regex = new RegExp(binKey + ' (\\w+)', 'g');
|
||||
appPackage.scripts[key] = appPackage.scripts[key].replace(
|
||||
regex,
|
||||
'node scripts/$1.js'
|
||||
);
|
||||
console.log(
|
||||
' Replacing ' +
|
||||
cyan('"' + binKey + ' ' + key + '"') +
|
||||
' with ' +
|
||||
cyan('"node scripts/' + key + '.js"')
|
||||
` Replacing ${cyan(`"${binKey} ${key}"`)} with ${cyan(`"node scripts/${key}.js"`)}`
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -137,7 +145,7 @@ prompt(
|
||||
console.log();
|
||||
console.log(cyan('Configuring package.json'));
|
||||
// Add Jest config
|
||||
console.log(' Adding ' + cyan('Jest') + ' configuration');
|
||||
console.log(` Adding ${cyan('Jest')} configuration`);
|
||||
appPackage.jest = createJestConfig(
|
||||
filePath => path.posix.join('<rootDir>', filePath),
|
||||
null,
|
||||
@@ -145,11 +153,11 @@ prompt(
|
||||
);
|
||||
|
||||
// Add Babel config
|
||||
console.log(' Adding ' + cyan('Babel') + ' preset');
|
||||
console.log(` Adding ${cyan('Babel')} preset`);
|
||||
appPackage.babel = babelConfig;
|
||||
|
||||
// Add ESlint config
|
||||
console.log(' Adding ' + cyan('ESLint') +' configuration');
|
||||
console.log(` Adding ${cyan('ESLint')} configuration`);
|
||||
appPackage.eslintConfig = eslintConfig;
|
||||
|
||||
fs.writeFileSync(
|
||||
@@ -162,26 +170,26 @@ prompt(
|
||||
if (ownPath.indexOf(appPath) === 0) {
|
||||
try {
|
||||
// remove react-scripts and react-scripts binaries from app node_modules
|
||||
Object.keys(ownPackage.bin).forEach(function(binKey) {
|
||||
Object.keys(ownPackage.bin).forEach(binKey => {
|
||||
fs.removeSync(path.join(appPath, 'node_modules', '.bin', binKey));
|
||||
});
|
||||
fs.removeSync(ownPath);
|
||||
} catch(e) {
|
||||
} catch (e) {
|
||||
// It's not essential that this succeeds
|
||||
}
|
||||
}
|
||||
|
||||
if (fs.existsSync(paths.yarnLockFile)) {
|
||||
console.log(cyan('Running yarn...'));
|
||||
spawnSync('yarnpkg', [], {stdio: 'inherit'});
|
||||
spawnSync('yarnpkg', [], { stdio: 'inherit' });
|
||||
} else {
|
||||
console.log(cyan('Running npm install...'));
|
||||
spawnSync('npm', ['install'], {stdio: 'inherit'});
|
||||
spawnSync('npm', ['install'], { stdio: 'inherit' });
|
||||
}
|
||||
console.log(green('Ejected successfully!'));
|
||||
console.log();
|
||||
|
||||
console.log(green('Please consider sharing why you ejected in this survey:'));
|
||||
console.log(green(' http://goo.gl/forms/Bi6CZjk1EqsdelXk1'));
|
||||
console.log()
|
||||
})
|
||||
console.log();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user