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 #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/react-native#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 facebook-github-bot-1 committed Feb 9, 2016
1 parent c260443 commit a76c435
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
8 changes: 8 additions & 0 deletions 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 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

0 comments on commit a76c435

Please sign in to comment.