Skip to content

Commit 80bf431

Browse files
satya164facebook-github-bot-3
authored andcommitted
Add warnings while upgrading RN with react-native upgrade
Summary: Closes react/react-native#4854 Reviewed By: svcscm Differential Revision: D2803252 Pulled By: foghina fb-gh-sync-id: e6b05b19cf45773d7683ae8ae35643f400e51692
1 parent 6d9096f commit 80bf431

1 file changed

Lines changed: 55 additions & 4 deletions

File tree

local-cli/upgrade/upgrade.js

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,67 @@
99
'use strict';
1010

1111
const fs = require('fs');
12+
const chalk = require('chalk');
1213
const path = require('path');
1314
const Promise = require('promise');
1415
const yeoman = require('yeoman-environment');
16+
const semver = require('semver');
1517

1618
module.exports = function upgrade(args, config) {
1719
args = args || process.argv;
18-
let env = yeoman.createEnv();
19-
let name = JSON.parse(fs.readFileSync('package.json', 'utf8')).name;
20-
let generatorPath = path.join(__dirname, '..', 'generator');
20+
const env = yeoman.createEnv();
21+
const pak = JSON.parse(fs.readFileSync('package.json', 'utf8'));
22+
const version = pak.dependencies['react-native'];
23+
24+
if (version) {
25+
if (version === 'latest' || version === '*') {
26+
console.warn(
27+
chalk.yellow(
28+
'Major releases are most likely to introduce breaking changes.\n' +
29+
'Use a proper version number in your \'package.json\' file to avoid breakage.\n' +
30+
'e.g. - ^0.18.0'
31+
)
32+
);
33+
} else {
34+
const installed = JSON.parse(fs.readFileSync('node_modules/react-native/package.json', 'utf8'));
35+
36+
if (semver.satisfies(installed.version, version)) {
37+
const v = version.replace(/^(~|\^|=)/, '').replace(/x/i, '0');
38+
39+
if (semver.valid(v)) {
40+
console.log(
41+
'Upgrading project to react-native v' + installed.version + '\n' +
42+
'Be sure to read the release notes and breaking changes:\n' +
43+
chalk.blue(
44+
'https://github.com/facebook/react-native/releases/tag/v' + semver.major(v) + '.' + semver.minor(v) + '.0'
45+
)
46+
);
47+
} else {
48+
console.log(
49+
chalk.yellow(
50+
'A valid version number for \'react-native\' is not specified your \'package.json\' file.'
51+
)
52+
);
53+
}
54+
} else {
55+
console.warn(
56+
chalk.yellow(
57+
'react-native version in \'package.json\' doesn\'t match the installed version in \'node_modules\'.\n' +
58+
'Try running \'npm install\' to fix the issue.'
59+
)
60+
);
61+
}
62+
}
63+
} else {
64+
console.warn(
65+
chalk.yellow(
66+
'Your \'package.json\' file doesn\'t seem to have \'react-native\' as a dependency.'
67+
)
68+
);
69+
}
70+
71+
const generatorPath = path.join(__dirname, '..', 'generator');
2172
env.register(generatorPath, 'react:app');
22-
let generatorArgs = ['react:app', name].concat(args);
73+
const generatorArgs = ['react:app', pak.name].concat(args);
2374
return new Promise((resolve) => env.run(generatorArgs, {upgrade: true}, resolve));
2475
};

0 commit comments

Comments
 (0)