Skip to content

Commit

Permalink
Move react to peerDependencies
Browse files Browse the repository at this point in the history
Summary:
This PR moves `react` from dependencies to peerDependencies.

In general, this would have only been important for those people using packages that depend on `react` and were using [email protected]@3 would automatically de-dupe.

However, when facebook#5812 gets merged, dependencies will be scoped to react-native (on both npm@2 & npm@3), thus breaking projects that are using a package like `react-redux` for example, which depends on `react`. There would be two copies of React installed, and due to the use of haste modules in `react`, this would break the packager and cause naming collisions.

This PR does three things -

1. Moves the dependency from dependencies to peerDependencies
2. Updates the local-cli to run `npm install react --save` when a new project is initialized.
3. Updates `react-native upgrade` to warn if `react` is not listed in the package.json's dependencies.

**Note: This will require a shrinkwrap update.**
Closes facebook#5813

Reviewed By: svcscm

Differential Revision: D2918380

Pulled By: androidtrunkagent

fb-gh-sync-id: 6e4234a45284be2fdf6fedf29e70b2d2d0262486
shipit-source-id: 6e4234a45284be2fdf6fedf29e70b2d2d0262486
  • Loading branch information
skevy authored and pglotov committed Mar 15, 2016
1 parent c926da5 commit 9ed2959
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
8 changes: 8 additions & 0 deletions local-cli/generator/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,13 @@ module.exports = yeoman.generators.NamedBase.extend({
{name: this.name}
);
}
},

install: function() {
if (this.options.upgrade) {
return;
}

this.npmInstall('react', { '--save': true });
}
});
13 changes: 13 additions & 0 deletions local-cli/upgrade/upgrade.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,19 @@ module.exports = function upgrade(args, config) {
'https://github.com/facebook/react-native/releases/tag/v' + semver.major(v) + '.' + semver.minor(v) + '.0'
)
);

// >= v0.21.0, we require react to be a peer depdendency
if (semver.gte(v, '0.21.0') && !pak.dependencies['react']) {
console.log(
chalk.yellow(
'\nYour \'package.json\' file doesn\'t seem to have \'react\' as a dependency.\n' +
'\'react\' was changed from a dependency to a peer dependency in react-native v0.21.0.\n' +
'Therefore, it\'s necessary to include \'react\' in your project\'s dependencies.\n' +
'Just run \'npm install --save react\', then re-run \'react-native upgrade\'.\n'
)
);
return Promise.resolve();
}
} else {
console.log(
chalk.yellow(
Expand Down
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,9 @@
"bin": {
"react-native": "local-cli/wrong-react-native.js"
},
"peerDependencies": {
"react": "^0.14.5"
},
"dependencies": {
"absolute-path": "^0.0.0",
"art": "^0.10.0",
Expand Down Expand Up @@ -133,7 +136,6 @@
"optimist": "^0.6.1",
"progress": "^1.1.8",
"promise": "^7.1.1",
"react": "^0.14.5",
"react-timer-mixin": "^0.13.2",
"react-transform-hmr": "^1.0.2",
"rebound": "^0.0.13",
Expand Down

0 comments on commit 9ed2959

Please sign in to comment.