Commit 9559ba48 authored by Dan Abramov's avatar Dan Abramov Committed by GitHub
Browse files

Put react-scripts in dependencies, not devDependencies (#2657)

* Put react-scripts in dependencies, not devDependencies

* Sort dependencies on eject

* Remove CI check
parent 4605e6c3
3 merge requests!12191Lim.Pisey.168:/Identified - We are currently investigating reports of missing build logs. The issue has been identified and a resolution is in progress. We will provide a further update when available.Mar 21, 09:02 UTC,!12853brikk,!5717Automatically extract project file structure from build bundle file
Showing with 21 additions and 32 deletions
+21 -32
...@@ -276,11 +276,7 @@ function run( ...@@ -276,11 +276,7 @@ function run(
}) })
.then(packageName => { .then(packageName => {
checkNodeVersion(packageName); checkNodeVersion(packageName);
setCaretRangeForRuntimeDeps(packageName);
// Since react-scripts has been installed with --save
// we need to move it into devDependencies and rewrite package.json
// also ensure react dependencies have caret version range
fixDependencies(packageName);
const scriptsPath = path.resolve( const scriptsPath = path.resolve(
process.cwd(), process.cwd(),
...@@ -497,16 +493,14 @@ function checkAppName(appName) { ...@@ -497,16 +493,14 @@ function checkAppName(appName) {
} }
// TODO: there should be a single place that holds the dependencies // TODO: there should be a single place that holds the dependencies
const dependencies = ['react', 'react-dom']; const dependencies = ['react', 'react-dom', 'react-scripts'].sort();
const devDependencies = ['react-scripts']; if (dependencies.indexOf(appName) >= 0) {
const allDependencies = dependencies.concat(devDependencies).sort();
if (allDependencies.indexOf(appName) >= 0) {
console.error( console.error(
chalk.red( chalk.red(
`We cannot create a project called ${chalk.green(appName)} because a dependency with the same name exists.\n` + `We cannot create a project called ${chalk.green(appName)} because a dependency with the same name exists.\n` +
`Due to the way npm works, the following names are not allowed:\n\n` `Due to the way npm works, the following names are not allowed:\n\n`
) + ) +
chalk.cyan(allDependencies.map(depName => ` ${depName}`).join('\n')) + chalk.cyan(dependencies.map(depName => ` ${depName}`).join('\n')) +
chalk.red('\n\nPlease choose a different project name.') chalk.red('\n\nPlease choose a different project name.')
); );
process.exit(1); process.exit(1);
...@@ -533,7 +527,7 @@ function makeCaretRange(dependencies, name) { ...@@ -533,7 +527,7 @@ function makeCaretRange(dependencies, name) {
dependencies[name] = patchedVersion; dependencies[name] = patchedVersion;
} }
function fixDependencies(packageName) { function setCaretRangeForRuntimeDeps(packageName) {
const packagePath = path.join(process.cwd(), 'package.json'); const packagePath = path.join(process.cwd(), 'package.json');
const packageJson = require(packagePath); const packageJson = require(packagePath);
...@@ -543,16 +537,11 @@ function fixDependencies(packageName) { ...@@ -543,16 +537,11 @@ function fixDependencies(packageName) {
} }
const packageVersion = packageJson.dependencies[packageName]; const packageVersion = packageJson.dependencies[packageName];
if (typeof packageVersion === 'undefined') { if (typeof packageVersion === 'undefined') {
console.error(chalk.red(`Unable to find ${packageName} in package.json`)); console.error(chalk.red(`Unable to find ${packageName} in package.json`));
process.exit(1); process.exit(1);
} }
packageJson.devDependencies = packageJson.devDependencies || {};
packageJson.devDependencies[packageName] = packageVersion;
delete packageJson.dependencies[packageName];
makeCaretRange(packageJson.dependencies, 'react'); makeCaretRange(packageJson.dependencies, 'react');
makeCaretRange(packageJson.dependencies, 'react-dom'); makeCaretRange(packageJson.dependencies, 'react-dom');
......
...@@ -146,24 +146,34 @@ inquirer ...@@ -146,24 +146,34 @@ inquirer
console.log(cyan('Updating the dependencies')); console.log(cyan('Updating the dependencies'));
const ownPackageName = ownPackage.name; const ownPackageName = ownPackage.name;
if (appPackage.devDependencies[ownPackageName]) { if (appPackage.devDependencies) {
console.log(` Removing ${cyan(ownPackageName)} from devDependencies`); // We used to put react-scripts in devDependencies
delete appPackage.devDependencies[ownPackageName]; if (appPackage.devDependencies[ownPackageName]) {
console.log(` Removing ${cyan(ownPackageName)} from devDependencies`);
delete appPackage.devDependencies[ownPackageName];
}
} }
appPackage.dependencies = appPackage.dependencies || {};
if (appPackage.dependencies[ownPackageName]) { if (appPackage.dependencies[ownPackageName]) {
console.log(` Removing ${cyan(ownPackageName)} from dependencies`); console.log(` Removing ${cyan(ownPackageName)} from dependencies`);
delete appPackage.dependencies[ownPackageName]; delete appPackage.dependencies[ownPackageName];
} }
Object.keys(ownPackage.dependencies).forEach(key => { Object.keys(ownPackage.dependencies).forEach(key => {
// For some reason optionalDependencies end up in dependencies after install // For some reason optionalDependencies end up in dependencies after install
if (ownPackage.optionalDependencies[key]) { if (ownPackage.optionalDependencies[key]) {
return; return;
} }
console.log(` Adding ${cyan(key)} to devDependencies`); console.log(` Adding ${cyan(key)} to dependencies`);
appPackage.devDependencies[key] = ownPackage.dependencies[key]; appPackage.dependencies[key] = ownPackage.dependencies[key];
});
// Sort the deps
const unsortedDependencies = appPackage.dependencies;
appPackage.dependencies = {};
Object.keys(unsortedDependencies).sort().forEach(key => {
appPackage.dependencies[key] = unsortedDependencies[key];
}); });
console.log(); console.log();
console.log(cyan('Updating the scripts')); console.log(cyan('Updating the scripts'));
delete appPackage.scripts['eject']; delete appPackage.scripts['eject'];
Object.keys(appPackage.scripts).forEach(key => { Object.keys(appPackage.scripts).forEach(key => {
......
...@@ -39,7 +39,6 @@ module.exports = function( ...@@ -39,7 +39,6 @@ module.exports = function(
// Copy over some of the devDependencies // Copy over some of the devDependencies
appPackage.dependencies = appPackage.dependencies || {}; appPackage.dependencies = appPackage.dependencies || {};
appPackage.devDependencies = appPackage.devDependencies || {};
// Setup the script rules // Setup the script rules
appPackage.scripts = { appPackage.scripts = {
......
...@@ -55,15 +55,6 @@ function checkDependencies { ...@@ -55,15 +55,6 @@ function checkDependencies {
echo "There are extraneous dependencies in package.json" echo "There are extraneous dependencies in package.json"
exit 1 exit 1
fi fi
if ! awk '/"devDependencies": {/{y=1;next}/},/{y=0; next}y' package.json | \
grep -v -q -E '^\s*"react(-dom|-scripts)?"'; then
echo "Dev Dependencies are correct"
else
echo "There are extraneous devDependencies in package.json"
exit 1
fi
} }
function create_react_app { function create_react_app {
......
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