Skip to content
This repository was archived by the owner on Jan 26, 2019. It is now read-only.

Commit 8536426

Browse files
gaearonwmonk
authored andcommitted
Put react-scripts in dependencies, not devDependencies (#2657)
* Put react-scripts in dependencies, not devDependencies * Sort dependencies on eject * Remove CI check
1 parent a9c8b81 commit 8536426

File tree

4 files changed

+21
-32
lines changed

4 files changed

+21
-32
lines changed

packages/create-react-app/createReactApp.js

+5-16
Original file line numberDiff line numberDiff line change
@@ -276,11 +276,7 @@ function run(
276276
})
277277
.then(packageName => {
278278
checkNodeVersion(packageName);
279-
280-
// Since react-scripts has been installed with --save
281-
// we need to move it into devDependencies and rewrite package.json
282-
// also ensure react dependencies have caret version range
283-
fixDependencies(packageName);
279+
setCaretRangeForRuntimeDeps(packageName);
284280

285281
const scriptsPath = path.resolve(
286282
process.cwd(),
@@ -497,16 +493,14 @@ function checkAppName(appName) {
497493
}
498494

499495
// TODO: there should be a single place that holds the dependencies
500-
const dependencies = ['react', 'react-dom'];
501-
const devDependencies = ['react-scripts'];
502-
const allDependencies = dependencies.concat(devDependencies).sort();
503-
if (allDependencies.indexOf(appName) >= 0) {
496+
const dependencies = ['react', 'react-dom', 'react-scripts'].sort();
497+
if (dependencies.indexOf(appName) >= 0) {
504498
console.error(
505499
chalk.red(
506500
`We cannot create a project called ${chalk.green(appName)} because a dependency with the same name exists.\n` +
507501
`Due to the way npm works, the following names are not allowed:\n\n`
508502
) +
509-
chalk.cyan(allDependencies.map(depName => ` ${depName}`).join('\n')) +
503+
chalk.cyan(dependencies.map(depName => ` ${depName}`).join('\n')) +
510504
chalk.red('\n\nPlease choose a different project name.')
511505
);
512506
process.exit(1);
@@ -533,7 +527,7 @@ function makeCaretRange(dependencies, name) {
533527
dependencies[name] = patchedVersion;
534528
}
535529

536-
function fixDependencies(packageName) {
530+
function setCaretRangeForRuntimeDeps(packageName) {
537531
const packagePath = path.join(process.cwd(), 'package.json');
538532
const packageJson = require(packagePath);
539533

@@ -543,16 +537,11 @@ function fixDependencies(packageName) {
543537
}
544538

545539
const packageVersion = packageJson.dependencies[packageName];
546-
547540
if (typeof packageVersion === 'undefined') {
548541
console.error(chalk.red(`Unable to find ${packageName} in package.json`));
549542
process.exit(1);
550543
}
551544

552-
packageJson.devDependencies = packageJson.devDependencies || {};
553-
packageJson.devDependencies[packageName] = packageVersion;
554-
delete packageJson.dependencies[packageName];
555-
556545
makeCaretRange(packageJson.dependencies, 'react');
557546
makeCaretRange(packageJson.dependencies, 'react-dom');
558547

packages/react-scripts/scripts/eject.js

+16-6
Original file line numberDiff line numberDiff line change
@@ -146,24 +146,34 @@ inquirer
146146

147147
console.log(cyan('Updating the dependencies'));
148148
const ownPackageName = ownPackage.name;
149-
if (appPackage.devDependencies[ownPackageName]) {
150-
console.log(` Removing ${cyan(ownPackageName)} from devDependencies`);
151-
delete appPackage.devDependencies[ownPackageName];
149+
if (appPackage.devDependencies) {
150+
// We used to put react-scripts in devDependencies
151+
if (appPackage.devDependencies[ownPackageName]) {
152+
console.log(` Removing ${cyan(ownPackageName)} from devDependencies`);
153+
delete appPackage.devDependencies[ownPackageName];
154+
}
152155
}
156+
appPackage.dependencies = appPackage.dependencies || {};
153157
if (appPackage.dependencies[ownPackageName]) {
154158
console.log(` Removing ${cyan(ownPackageName)} from dependencies`);
155159
delete appPackage.dependencies[ownPackageName];
156160
}
157-
158161
Object.keys(ownPackage.dependencies).forEach(key => {
159162
// For some reason optionalDependencies end up in dependencies after install
160163
if (ownPackage.optionalDependencies[key]) {
161164
return;
162165
}
163-
console.log(` Adding ${cyan(key)} to devDependencies`);
164-
appPackage.devDependencies[key] = ownPackage.dependencies[key];
166+
console.log(` Adding ${cyan(key)} to dependencies`);
167+
appPackage.dependencies[key] = ownPackage.dependencies[key];
168+
});
169+
// Sort the deps
170+
const unsortedDependencies = appPackage.dependencies;
171+
appPackage.dependencies = {};
172+
Object.keys(unsortedDependencies).sort().forEach(key => {
173+
appPackage.dependencies[key] = unsortedDependencies[key];
165174
});
166175
console.log();
176+
167177
console.log(cyan('Updating the scripts'));
168178
delete appPackage.scripts['eject'];
169179
Object.keys(appPackage.scripts).forEach(key => {

packages/react-scripts/scripts/init.js

-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ module.exports = function(
3939

4040
// Copy over some of the devDependencies
4141
appPackage.dependencies = appPackage.dependencies || {};
42-
appPackage.devDependencies = appPackage.devDependencies || {};
4342

4443
// Setup the script rules
4544
appPackage.scripts = {

tasks/e2e-installs.sh

-9
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,6 @@ function checkDependencies {
5555
echo "There are extraneous dependencies in package.json"
5656
exit 1
5757
fi
58-
59-
60-
if ! awk '/"devDependencies": {/{y=1;next}/},/{y=0; next}y' package.json | \
61-
grep -v -q -E '^\s*"react(-dom|-scripts)?"'; then
62-
echo "Dev Dependencies are correct"
63-
else
64-
echo "There are extraneous devDependencies in package.json"
65-
exit 1
66-
fi
6758
}
6859

6960
function create_react_app {

0 commit comments

Comments
 (0)