From 964fad59689f911c87c2b9222cb5ab36c1e8d727 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Tue, 22 Oct 2019 19:08:32 +0800 Subject: [PATCH] fix: should tolerate cli version check error (#4741) * fix: should tolerate cli version check error * fix: add the error message after the DEBUG indicator --- packages/@vue/cli/lib/util/clearConsole.js | 10 +++++++--- packages/@vue/cli/lib/util/getVersions.js | 14 +++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/@vue/cli/lib/util/clearConsole.js b/packages/@vue/cli/lib/util/clearConsole.js index 10c3632835..af4f9689a1 100644 --- a/packages/@vue/cli/lib/util/clearConsole.js +++ b/packages/@vue/cli/lib/util/clearConsole.js @@ -26,8 +26,7 @@ async function getInstallationCommand () { } exports.generateTitle = async function (checkUpdate) { - const { current, latest } = await getVersions() - + const { current, latest, error } = await getVersions() let title = chalk.bold.blue(`Vue CLI v${current}`) if (process.env.VUE_CLI_TEST) { @@ -36,7 +35,12 @@ exports.generateTitle = async function (checkUpdate) { if (process.env.VUE_CLI_DEBUG) { title += ' ' + chalk.magenta.bold('DEBUG') } - if (checkUpdate && semver.gt(latest, current)) { + + if (error) { + title += '\n' + chalk.red('Failed to check for updates') + } + + if (checkUpdate && !error && semver.gt(latest, current)) { if (process.env.VUE_CLI_API_MODE) { title += chalk.green(` 🌟️ New version available: ${latest}`) } else { diff --git a/packages/@vue/cli/lib/util/getVersions.js b/packages/@vue/cli/lib/util/getVersions.js index 3d32c03200..068dffc91e 100644 --- a/packages/@vue/cli/lib/util/getVersions.js +++ b/packages/@vue/cli/lib/util/getVersions.js @@ -26,20 +26,28 @@ module.exports = async function getVersions () { const cached = latestVersion const daysPassed = (Date.now() - lastChecked) / (60 * 60 * 1000 * 24) + let error if (daysPassed > 1) { // if we haven't check for a new version in a day, wait for the check // before proceeding - latest = await getAndCacheLatestVersion(cached, includePrerelease) + try { + latest = await getAndCacheLatestVersion(cached, includePrerelease) + } catch (e) { + latest = cached + error = e + } } else { // Otherwise, do a check in the background. If the result was updated, // it will be used for the next 24 hours. - getAndCacheLatestVersion(cached, includePrerelease) + // don't throw to interrupt the user if the background check failed + getAndCacheLatestVersion(cached, includePrerelease).catch(() => {}) latest = cached } return (sessionCached = { current: local, - latest + latest, + error }) }