From ede7da246aac46c97d30965103eaf310ec49f60f Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 25 Mar 2020 15:55:24 +0800 Subject: [PATCH 1/2] fix: add a timeout, avoid process hanging fixes #5310 --- packages/@vue/cli-shared-utils/lib/env.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 9a95d32b5d..62015f1292 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -156,7 +156,8 @@ let hasCheckedBrowsers = false function tryRun (cmd) { try { return execSync(cmd, { - stdio: [0, 'pipe', 'ignore'] + stdio: [0, 'pipe', 'ignore'], + timeout: 10000 }).toString().trim() } catch (e) { return '' From 2fbbf1b6abbea97a942bfdbf71b2d399c4129dde Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 25 Mar 2020 16:17:39 +0800 Subject: [PATCH 2/2] fix: avoid accidentally trigerring the `installedBrowsers` getter fixes #5286 --- packages/@vue/cli-shared-utils/index.js | 7 +++ packages/@vue/cli-shared-utils/lib/env.js | 73 +++++++++++------------ 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/packages/@vue/cli-shared-utils/index.js b/packages/@vue/cli-shared-utils/index.js index 0637b56486..830a325459 100644 --- a/packages/@vue/cli-shared-utils/index.js +++ b/packages/@vue/cli-shared-utils/index.js @@ -19,3 +19,10 @@ exports.chalk = require('chalk') exports.execa = require('execa') exports.semver = require('semver') + +Object.defineProperty(exports, 'installedBrowsers', { + enumerable: true, + get () { + return exports.getInstalledBrowsers() + } +}) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 62015f1292..d45616dee3 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -178,44 +178,41 @@ function getMacAppVersion (bundleIdentifier) { } } -Object.defineProperty(exports, 'installedBrowsers', { - enumerable: true, - get () { - if (hasCheckedBrowsers) { - return browsers - } - hasCheckedBrowsers = true - - if (exports.isLinux) { - browsers.chrome = getLinuxAppVersion('google-chrome') - browsers.firefox = getLinuxAppVersion('firefox') - } else if (exports.isMacintosh) { - browsers.chrome = getMacAppVersion('com.google.Chrome') - browsers.firefox = getMacAppVersion('org.mozilla.firefox') - } else if (exports.isWindows) { - // get chrome stable version - // https://stackoverflow.com/a/51773107/2302258 - const chromeQueryResult = tryRun( - 'reg query "HKLM\\Software\\Google\\Update\\Clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}" /v pv /reg:32' - ) || tryRun( - 'reg query "HKCU\\Software\\Google\\Update\\Clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}" /v pv /reg:32' - ) - if (chromeQueryResult) { - const matched = chromeQueryResult.match(/REG_SZ\s+(\S*)$/) - browsers.chrome = matched && matched[1] - } - - // get firefox version - // https://community.spiceworks.com/topic/111518-how-to-determine-version-of-installed-firefox-in-windows-batchscript - const ffQueryResult = tryRun( - 'reg query "HKLM\\Software\\Mozilla\\Mozilla Firefox" /v CurrentVersion' - ) - if (ffQueryResult) { - const matched = ffQueryResult.match(/REG_SZ\s+(\S*)$/) - browsers.firefox = matched && matched[1] - } +exports.getInstalledBrowsers = () => { + if (hasCheckedBrowsers) { + return browsers + } + hasCheckedBrowsers = true + + if (exports.isLinux) { + browsers.chrome = getLinuxAppVersion('google-chrome') + browsers.firefox = getLinuxAppVersion('firefox') + } else if (exports.isMacintosh) { + browsers.chrome = getMacAppVersion('com.google.Chrome') + browsers.firefox = getMacAppVersion('org.mozilla.firefox') + } else if (exports.isWindows) { + // get chrome stable version + // https://stackoverflow.com/a/51773107/2302258 + const chromeQueryResult = tryRun( + 'reg query "HKLM\\Software\\Google\\Update\\Clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}" /v pv /reg:32' + ) || tryRun( + 'reg query "HKCU\\Software\\Google\\Update\\Clients\\{8A69D345-D564-463c-AFF1-A69D9E530F96}" /v pv /reg:32' + ) + if (chromeQueryResult) { + const matched = chromeQueryResult.match(/REG_SZ\s+(\S*)$/) + browsers.chrome = matched && matched[1] } - return browsers + // get firefox version + // https://community.spiceworks.com/topic/111518-how-to-determine-version-of-installed-firefox-in-windows-batchscript + const ffQueryResult = tryRun( + 'reg query "HKLM\\Software\\Mozilla\\Mozilla Firefox" /v CurrentVersion' + ) + if (ffQueryResult) { + const matched = ffQueryResult.match(/REG_SZ\s+(\S*)$/) + browsers.firefox = matched && matched[1] + } } -}) + + return browsers +}