diff --git a/react-native-git-upgrade/checks.js b/react-native-git-upgrade/checks.js index 35177a12f2c0d0..6856ce6a48dee1 100644 --- a/react-native-git-upgrade/checks.js +++ b/react-native-git-upgrade/checks.js @@ -22,8 +22,8 @@ function checkDeclaredVersion(declaredVersion) { function checkMatchingVersions(currentVersion, declaredVersion) { if (!semver.satisfies(currentVersion, declaredVersion)) { throw new Error( - 'react-native version in "package.json" doesn\'t match ' + - 'the installed version in "node_modules".\n' + + 'react-native version in "package.json" (' + declaredVersion + ') doesn\'t match ' + + 'the installed version in "node_modules" (' + currentVersion + ').\n' + 'Try running "npm install" to fix this.' ); } diff --git a/react-native-git-upgrade/cliEntry.js b/react-native-git-upgrade/cliEntry.js index 1a0bcae25a724c..2cca0e7a7311e0 100644 --- a/react-native-git-upgrade/cliEntry.js +++ b/react-native-git-upgrade/cliEntry.js @@ -156,20 +156,16 @@ function runYeomanGenerators(generatorDir, appName, verbose) { return new Promise((resolve) => env.run(generatorArgs, {upgrade: true, force: true}, resolve)); } -async function run(requiredVersion, cliArgs) { - const context = { - tmpDir: path.resolve(os.tmpdir(), 'react-native-git-upgrade'), - generatorDir: path.resolve(process.cwd(), 'node_modules', 'react-native', 'local-cli', 'generator'), - requiredVersion, - cliArgs, - }; - +/** + * If there's a newer version of react-native-git-upgrade in npm, suggest to the user to upgrade. + */ +async function checkForUpdates() { try { log.info('Check for react-native-git-upgrade updates'); const lastGitUpgradeVersion = await exec('npm view react-native-git-upgrade@latest version'); const current = require('./package').version; const latest = semver.clean(lastGitUpgradeVersion); - if (current !== latest) { + if (semver.gt(latest, current)) { log.warn( 'A more recent version of "react-native-git-upgrade" has been found.\n' + `Current: ${current}\n` + @@ -177,6 +173,21 @@ async function run(requiredVersion, cliArgs) { 'Please run "npm install -g react-native-git-upgrade"' ); } + } catch (err) { + log.warn('Check for latest version failed', err.message); + } +} + +async function run(requiredVersion, cliArgs) { + const context = { + tmpDir: path.resolve(os.tmpdir(), 'react-native-git-upgrade'), + generatorDir: path.resolve(process.cwd(), 'node_modules', 'react-native', 'local-cli', 'generator'), + requiredVersion, + cliArgs, + }; + + try { + await checkForUpdates(); log.info('Read package.json files'); const {rnPak, pak} = readPackageFiles();