From 51beafcc12d46a3ebba46530faa6f4f5e656ba75 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Fri, 11 Oct 2019 19:06:08 +0200 Subject: [PATCH 01/16] fix: add pnpm v4 support in pnpm v4 the option '--loglevel' is no longer available instead '--reporter' is used. --- packages/@vue/cli-shared-utils/lib/env.js | 20 +++++++++++++++++++ .../cli/lib/util/ProjectPackageManager.js | 20 +++++++++++++------ 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 3c66418034..c29f475fcf 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -80,6 +80,7 @@ exports.hasProjectGit = (cwd) => { let _hasPnpm let _hasPnpm3orLater +let _hasPnpm4OrLater const _pnpmProjects = new LRU({ max: 10, maxAge: 1000 @@ -107,6 +108,25 @@ exports.hasPnpm3OrLater = () => { } } +exports.hasPnpm4OrLater = () => { + if (process.env.VUE_CLI_TEST) { + return true + } + if (_hasPnpm3orLater != null) { + return _hasPnpm4orLater + } + try { + const pnpmVersion = execSync('pnpm --version', { + stdio: ['pipe', 'pipe', 'ignore'] + }).toString() + _hasPnpm = true + _hasPnpm4orLater = semver.gte(pnpmVersion, '4.0.0') + return _hasPnpm4orLater + } catch (e) { + return (_hasPnpm4orLater = false) + } +} + exports.hasProjectPnpm = (cwd) => { if (_pnpmProjects.has(cwd)) { return checkPnpm(_pnpmProjects.get(cwd)) diff --git a/packages/@vue/cli/lib/util/ProjectPackageManager.js b/packages/@vue/cli/lib/util/ProjectPackageManager.js index 2242137e5b..0f4c4c620f 100644 --- a/packages/@vue/cli/lib/util/ProjectPackageManager.js +++ b/packages/@vue/cli/lib/util/ProjectPackageManager.js @@ -11,6 +11,7 @@ const { hasYarn, hasProjectYarn, hasPnpm3OrLater, + hasPnpm4OrLater, hasProjectPnpm } = require('@vue/cli-shared-utils/lib/env') const { isOfficialPlugin, resolvePluginId } = require('@vue/cli-shared-utils/lib/pluginResolution') @@ -32,6 +33,18 @@ const isTestOrDebug = process.env.VUE_CLI_TEST || process.env.VUE_CLI_DEBUG const TAOBAO_DIST_URL = 'https://npm.taobao.org/dist' const SUPPORTED_PACKAGE_MANAGERS = ['yarn', 'pnpm', 'npm'] +const PACKAGE_MANAGER_PNPMv4_CONFIG = { + install: ['install', '--reporter', 'silent', '--shamefully-hoist'], + add: ['install', '--reporter', 'silent', '--shamefully-hoist'], + upgrade: ['update', '--reporter', 'silent'], + remove: ['uninstall', '--reporter', 'silent'] +} +const PACKAGE_MANAGER_PNPMv3_CONFIG = { + install: ['install', '--loglevel', 'error', '--shamefully-flatten'], + add: ['install', '--loglevel', 'error', '--shamefully-flatten'], + upgrade: ['update', '--loglevel', 'error'], + remove: ['uninstall', '--loglevel', 'error'] +} const PACKAGE_MANAGER_CONFIG = { npm: { install: ['install', '--loglevel', 'error'], @@ -39,12 +52,7 @@ const PACKAGE_MANAGER_CONFIG = { upgrade: ['update', '--loglevel', 'error'], remove: ['uninstall', '--loglevel', 'error'] }, - pnpm: { - install: ['install', '--loglevel', 'error', '--shamefully-flatten'], - add: ['install', '--loglevel', 'error', '--shamefully-flatten'], - upgrade: ['update', '--loglevel', 'error'], - remove: ['uninstall', '--loglevel', 'error'] - }, + pnpm: hasPnpm4OrLater ? PACKAGE_MANAGER_PNPMv4_CONFIG : PACKAGE_MANAGER_PNPMv3_CONFIG, yarn: { install: [], add: ['add'], From 96fe934927b9480d397ec5476713bd6fb2880272 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Fri, 11 Oct 2019 19:30:20 +0200 Subject: [PATCH 02/16] refactor: remove 'v' from PNPM constants for linting --- packages/@vue/cli/lib/util/ProjectPackageManager.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@vue/cli/lib/util/ProjectPackageManager.js b/packages/@vue/cli/lib/util/ProjectPackageManager.js index 0f4c4c620f..95aa10a12a 100644 --- a/packages/@vue/cli/lib/util/ProjectPackageManager.js +++ b/packages/@vue/cli/lib/util/ProjectPackageManager.js @@ -33,13 +33,13 @@ const isTestOrDebug = process.env.VUE_CLI_TEST || process.env.VUE_CLI_DEBUG const TAOBAO_DIST_URL = 'https://npm.taobao.org/dist' const SUPPORTED_PACKAGE_MANAGERS = ['yarn', 'pnpm', 'npm'] -const PACKAGE_MANAGER_PNPMv4_CONFIG = { +const PACKAGE_MANAGER_PNPM4_CONFIG = { install: ['install', '--reporter', 'silent', '--shamefully-hoist'], add: ['install', '--reporter', 'silent', '--shamefully-hoist'], upgrade: ['update', '--reporter', 'silent'], remove: ['uninstall', '--reporter', 'silent'] } -const PACKAGE_MANAGER_PNPMv3_CONFIG = { +const PACKAGE_MANAGER_PNPM3_CONFIG = { install: ['install', '--loglevel', 'error', '--shamefully-flatten'], add: ['install', '--loglevel', 'error', '--shamefully-flatten'], upgrade: ['update', '--loglevel', 'error'], @@ -52,7 +52,7 @@ const PACKAGE_MANAGER_CONFIG = { upgrade: ['update', '--loglevel', 'error'], remove: ['uninstall', '--loglevel', 'error'] }, - pnpm: hasPnpm4OrLater ? PACKAGE_MANAGER_PNPMv4_CONFIG : PACKAGE_MANAGER_PNPMv3_CONFIG, + pnpm: hasPnpm4OrLater ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, yarn: { install: [], add: ['add'], From 7ccb000edb48854276e433d4dce383d8df081204 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Fri, 11 Oct 2019 19:31:41 +0200 Subject: [PATCH 03/16] refactor: rename variable --- packages/@vue/cli-shared-utils/lib/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index c29f475fcf..55a7547dd3 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -80,7 +80,7 @@ exports.hasProjectGit = (cwd) => { let _hasPnpm let _hasPnpm3orLater -let _hasPnpm4OrLater +let _hasPnpm4orLater const _pnpmProjects = new LRU({ max: 10, maxAge: 1000 From 8aec681ecfed2190ab8730f7431981c7e97481cd Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Fri, 11 Oct 2019 22:48:19 +0200 Subject: [PATCH 04/16] fix: typo in _hasPnpm4orLater Co-Authored-By: Pavan Kumar Sunkara --- packages/@vue/cli-shared-utils/lib/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 55a7547dd3..81975c91c0 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -112,7 +112,7 @@ exports.hasPnpm4OrLater = () => { if (process.env.VUE_CLI_TEST) { return true } - if (_hasPnpm3orLater != null) { + if (_hasPnpm4orLater != null) { return _hasPnpm4orLater } try { From e4e5617f50aeb59c9706e87719c0978b31b2a68e Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Fri, 11 Oct 2019 23:34:34 +0200 Subject: [PATCH 05/16] refactor: reduce the amount of duplicate code for pnpm version check --- packages/@vue/cli-shared-utils/lib/env.js | 34 ++++++++++------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 81975c91c0..f7706fc435 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -86,13 +86,7 @@ const _pnpmProjects = new LRU({ maxAge: 1000 }) -exports.hasPnpm3OrLater = () => { - if (process.env.VUE_CLI_TEST) { - return true - } - if (_hasPnpm3orLater != null) { - return _hasPnpm3orLater - } +function checkPnpmVersion () { try { const pnpmVersion = execSync('pnpm --version', { stdio: ['pipe', 'pipe', 'ignore'] @@ -102,12 +96,23 @@ exports.hasPnpm3OrLater = () => { // so we only support pnpm >= 3.0.0 _hasPnpm = true _hasPnpm3orLater = semver.gte(pnpmVersion, '3.0.0') - return _hasPnpm3orLater + _hasPnpm4orLater = semver.gte(pnpmVersion, '4.0.0') + return [_hasPnpm3orLater, _hasPnpm4orLater] } catch (e) { - return (_hasPnpm3orLater = false) + return [_hasPnpm3orLater = false, _hasPnpm4orLater = false] } } +exports.hasPnpm3OrLater = () => { + if (process.env.VUE_CLI_TEST) { + return true + } + if (_hasPnpm3orLater != null) { + return _hasPnpm3orLater + } + return checkPnpmVersion()[0] +} + exports.hasPnpm4OrLater = () => { if (process.env.VUE_CLI_TEST) { return true @@ -115,16 +120,7 @@ exports.hasPnpm4OrLater = () => { if (_hasPnpm4orLater != null) { return _hasPnpm4orLater } - try { - const pnpmVersion = execSync('pnpm --version', { - stdio: ['pipe', 'pipe', 'ignore'] - }).toString() - _hasPnpm = true - _hasPnpm4orLater = semver.gte(pnpmVersion, '4.0.0') - return _hasPnpm4orLater - } catch (e) { - return (_hasPnpm4orLater = false) - } + return checkPnpmVersion()[1] } exports.hasProjectPnpm = (cwd) => { From 850d97d58a00c2e3c6cc193750be9021b97e81a5 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Fri, 11 Oct 2019 23:44:21 +0200 Subject: [PATCH 06/16] refactor: remove return-assignment --- packages/@vue/cli-shared-utils/lib/env.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index f7706fc435..935e101745 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -97,10 +97,11 @@ function checkPnpmVersion () { _hasPnpm = true _hasPnpm3orLater = semver.gte(pnpmVersion, '3.0.0') _hasPnpm4orLater = semver.gte(pnpmVersion, '4.0.0') - return [_hasPnpm3orLater, _hasPnpm4orLater] } catch (e) { - return [_hasPnpm3orLater = false, _hasPnpm4orLater = false] + _hasPnpm3orLater = false + _hasPnpm4orLater = false } + return [_hasPnpm3orLater, _hasPnpm4orLater] } exports.hasPnpm3OrLater = () => { From 7993c2c2417ff2faadf12d59c9c67e14d58194d5 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Sat, 12 Oct 2019 11:35:46 +0200 Subject: [PATCH 07/16] refactor: add explicit return value instead of using array access Co-Authored-By: Pavan Kumar Sunkara --- 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 935e101745..8a4af49fd9 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -111,7 +111,8 @@ exports.hasPnpm3OrLater = () => { if (_hasPnpm3orLater != null) { return _hasPnpm3orLater } - return checkPnpmVersion()[0] + checkPnpmVersion() + return _hasPnpm3orLater } exports.hasPnpm4OrLater = () => { From 966309b4863b421d1f4f8bff1ede21beda215e04 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Sun, 13 Oct 2019 22:47:15 +0200 Subject: [PATCH 08/16] fix: remove return value from checkPnpmVersion --- packages/@vue/cli-shared-utils/lib/env.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 8a4af49fd9..eb7e63b076 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -88,7 +88,7 @@ const _pnpmProjects = new LRU({ function checkPnpmVersion () { try { - const pnpmVersion = execSync('pnpm --version', { + pnpmVersion = execSync('pnpm --version', { stdio: ['pipe', 'pipe', 'ignore'] }).toString() // there's a critical bug in pnpm 2 @@ -101,7 +101,6 @@ function checkPnpmVersion () { _hasPnpm3orLater = false _hasPnpm4orLater = false } - return [_hasPnpm3orLater, _hasPnpm4orLater] } exports.hasPnpm3OrLater = () => { @@ -122,7 +121,8 @@ exports.hasPnpm4OrLater = () => { if (_hasPnpm4orLater != null) { return _hasPnpm4orLater } - return checkPnpmVersion()[1] + checkPnpmVersion() + return _hasPnpm4orLater } exports.hasProjectPnpm = (cwd) => { From 5978ab8c535846d1577c68bdc717921435017b0e Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Sun, 13 Oct 2019 23:42:58 +0200 Subject: [PATCH 09/16] fix: pnpmVersion variable --- packages/@vue/cli-shared-utils/lib/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index eb7e63b076..324042ca00 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -88,7 +88,7 @@ const _pnpmProjects = new LRU({ function checkPnpmVersion () { try { - pnpmVersion = execSync('pnpm --version', { + let pnpmVersion = execSync('pnpm --version', { stdio: ['pipe', 'pipe', 'ignore'] }).toString() // there's a critical bug in pnpm 2 From 1e9cccd6625e1fba4bc503d7d2b8dfccf61a043e Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Mon, 14 Oct 2019 11:44:22 +0200 Subject: [PATCH 10/16] refactor: cache pnpm version number --- packages/@vue/cli-shared-utils/lib/env.js | 37 +++++-------------- .../@vue/cli-ui/apollo-server/util/command.js | 4 +- packages/@vue/cli/lib/Creator.js | 8 ++-- .../cli/lib/util/ProjectPackageManager.js | 7 ++-- packages/@vue/cli/lib/util/clearConsole.js | 4 +- packages/@vue/cli/lib/util/loadCommand.js | 4 +- 6 files changed, 23 insertions(+), 41 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 324042ca00..57f0cb2b00 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -79,50 +79,33 @@ exports.hasProjectGit = (cwd) => { } let _hasPnpm -let _hasPnpm3orLater -let _hasPnpm4orLater +let _pnpmVersion const _pnpmProjects = new LRU({ max: 10, maxAge: 1000 }) -function checkPnpmVersion () { +function getPnpmVersion () { try { - let pnpmVersion = execSync('pnpm --version', { + _pnpmVersion = execSync('pnpm --version', { stdio: ['pipe', 'pipe', 'ignore'] }).toString() // there's a critical bug in pnpm 2 // https://github.com/pnpm/pnpm/issues/1678#issuecomment-469981972 // so we only support pnpm >= 3.0.0 _hasPnpm = true - _hasPnpm3orLater = semver.gte(pnpmVersion, '3.0.0') - _hasPnpm4orLater = semver.gte(pnpmVersion, '4.0.0') - } catch (e) { - _hasPnpm3orLater = false - _hasPnpm4orLater = false - } -} - -exports.hasPnpm3OrLater = () => { - if (process.env.VUE_CLI_TEST) { - return true - } - if (_hasPnpm3orLater != null) { - return _hasPnpm3orLater - } - checkPnpmVersion() - return _hasPnpm3orLater + } catch (e) {} + return _pnpmVersion || '0.0.0' } -exports.hasPnpm4OrLater = () => { +exports.hasPnpmXOrLater = (version) => { if (process.env.VUE_CLI_TEST) { return true } - if (_hasPnpm4orLater != null) { - return _hasPnpm4orLater + if (_pnpmVersion != null) { + return semver.gte(_pnpmVersion, version) } - checkPnpmVersion() - return _hasPnpm4orLater + return semver.gte(getPnpmVersion(), version) } exports.hasProjectPnpm = (cwd) => { @@ -137,7 +120,7 @@ exports.hasProjectPnpm = (cwd) => { } function checkPnpm (result) { - if (result && !exports.hasPnpm3OrLater()) { + if (result && !exports.hasPnpmXOrLater('3.0.0')) { throw new Error(`The project seems to require pnpm${_hasPnpm ? ' >= 3' : ''} but it's not installed.`) } return result diff --git a/packages/@vue/cli-ui/apollo-server/util/command.js b/packages/@vue/cli-ui/apollo-server/util/command.js index c0792d344d..78aa935668 100644 --- a/packages/@vue/cli-ui/apollo-server/util/command.js +++ b/packages/@vue/cli-ui/apollo-server/util/command.js @@ -1,14 +1,14 @@ const { hasYarn, hasProjectYarn, - hasPnpm3OrLater, + hasPnpmXOrLater, hasProjectPnpm } = require('@vue/cli-shared-utils') const { loadOptions } = require('@vue/cli/lib/options') exports.getCommand = function (cwd = undefined) { if (!cwd) { - return loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpm3OrLater() ? 'pnpm' : 'npm') + return loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpmXOrLater('3.0.0') ? 'pnpm' : 'npm') } return hasProjectYarn(cwd) ? 'yarn' : hasProjectPnpm(cwd) ? 'pnpm' : 'npm' } diff --git a/packages/@vue/cli/lib/Creator.js b/packages/@vue/cli/lib/Creator.js index a2897f27ca..d1056ba720 100644 --- a/packages/@vue/cli/lib/Creator.js +++ b/packages/@vue/cli/lib/Creator.js @@ -33,7 +33,7 @@ const { hasGit, hasProjectGit, hasYarn, - hasPnpm3OrLater, + hasPnpmXOrLater, logWithSpinner, stopSpinner, exit, @@ -116,7 +116,7 @@ module.exports = class Creator extends EventEmitter { cliOptions.packageManager || loadOptions().packageManager || (hasYarn() ? 'yarn' : null) || - (hasPnpm3OrLater() ? 'pnpm' : 'npm') + (hasPnpmXOrLater('3.0.0') ? 'pnpm' : 'npm') ) const pm = new PackageManager({ context, forcePackageManager: packageManager }) @@ -448,7 +448,7 @@ module.exports = class Creator extends EventEmitter { // ask for packageManager once const savedOptions = loadOptions() - if (!savedOptions.packageManager && (hasYarn() || hasPnpm3OrLater())) { + if (!savedOptions.packageManager && (hasYarn() || hasPnpmXOrLater('3.0.0'))) { const packageManagerChoices = [] if (hasYarn()) { @@ -459,7 +459,7 @@ module.exports = class Creator extends EventEmitter { }) } - if (hasPnpm3OrLater()) { + if (hasPnpmXOrLater('3.0.0')) { packageManagerChoices.push({ name: 'Use PNPM', value: 'pnpm', diff --git a/packages/@vue/cli/lib/util/ProjectPackageManager.js b/packages/@vue/cli/lib/util/ProjectPackageManager.js index 95aa10a12a..7ee0ad43db 100644 --- a/packages/@vue/cli/lib/util/ProjectPackageManager.js +++ b/packages/@vue/cli/lib/util/ProjectPackageManager.js @@ -10,8 +10,7 @@ const chalk = require('chalk') const { hasYarn, hasProjectYarn, - hasPnpm3OrLater, - hasPnpm4OrLater, + hasPnpmXOrLater, hasProjectPnpm } = require('@vue/cli-shared-utils/lib/env') const { isOfficialPlugin, resolvePluginId } = require('@vue/cli-shared-utils/lib/pluginResolution') @@ -52,7 +51,7 @@ const PACKAGE_MANAGER_CONFIG = { upgrade: ['update', '--loglevel', 'error'], remove: ['uninstall', '--loglevel', 'error'] }, - pnpm: hasPnpm4OrLater ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, + pnpm: hasPnpmXOrLater('4.0.0') ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, yarn: { install: [], add: ['add'], @@ -82,7 +81,7 @@ class PackageManager { } else if (context) { this.bin = hasProjectYarn(context) ? 'yarn' : hasProjectPnpm(context) ? 'pnpm' : 'npm' } else { - this.bin = loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpm3OrLater() ? 'pnpm' : 'npm') + this.bin = loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpmXOrLater('3.0.0') ? 'pnpm' : 'npm') } if (!SUPPORTED_PACKAGE_MANAGERS.includes(this.bin)) { diff --git a/packages/@vue/cli/lib/util/clearConsole.js b/packages/@vue/cli/lib/util/clearConsole.js index 10c3632835..5079c4c4fa 100644 --- a/packages/@vue/cli/lib/util/clearConsole.js +++ b/packages/@vue/cli/lib/util/clearConsole.js @@ -2,7 +2,7 @@ const chalk = require('chalk') const execa = require('execa') const semver = require('semver') const getVersions = require('./getVersions') -const { clearConsole, hasYarn, hasPnpm3OrLater } = require('@vue/cli-shared-utils') +const { clearConsole, hasYarn, hasPnpmXOrLater } = require('@vue/cli-shared-utils') async function getInstallationCommand () { if (hasYarn()) { @@ -12,7 +12,7 @@ async function getInstallationCommand () { } } - if (hasPnpm3OrLater()) { + if (hasPnpmXOrLater('3.0.0')) { const { stdout: pnpmGlobalPrefix } = await execa('pnpm', ['config', 'get', 'prefix']) if (__dirname.includes(pnpmGlobalPrefix) && __dirname.includes('pnpm-global')) { return `pnpm i -g` diff --git a/packages/@vue/cli/lib/util/loadCommand.js b/packages/@vue/cli/lib/util/loadCommand.js index 1253bbcb69..194b8bc7be 100644 --- a/packages/@vue/cli/lib/util/loadCommand.js +++ b/packages/@vue/cli/lib/util/loadCommand.js @@ -11,11 +11,11 @@ module.exports = function loadCommand (commandName, moduleName) { } catch (err2) { if (isNotFoundError(err2)) { const chalk = require('chalk') - const { hasYarn, hasPnpm3OrLater } = require('@vue/cli-shared-utils') + const { hasYarn, hasPnpmXOrLater } = require('@vue/cli-shared-utils') let installCommand = `npm install -g` if (hasYarn()) { installCommand = `yarn global add` - } else if (hasPnpm3OrLater()) { + } else if (hasPnpmXOrLater('3.0.0')) { installCommand = `pnpm install -g` } console.log() From 7157ff75872cdb2266a5aeacb66eb84fee1c482f Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Mon, 14 Oct 2019 14:06:07 +0200 Subject: [PATCH 11/16] refactor: fix function name and revert api break --- packages/@vue/cli-shared-utils/lib/env.js | 12 ++++++++++-- packages/@vue/cli-ui/apollo-server/util/command.js | 4 ++-- packages/@vue/cli/lib/Creator.js | 8 ++++---- packages/@vue/cli/lib/util/ProjectPackageManager.js | 7 ++++--- packages/@vue/cli/lib/util/clearConsole.js | 4 ++-- packages/@vue/cli/lib/util/loadCommand.js | 4 ++-- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 57f0cb2b00..924b934618 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -98,7 +98,7 @@ function getPnpmVersion () { return _pnpmVersion || '0.0.0' } -exports.hasPnpmXOrLater = (version) => { +function hasPnpmVersionOrLater (version) { if (process.env.VUE_CLI_TEST) { return true } @@ -108,6 +108,14 @@ exports.hasPnpmXOrLater = (version) => { return semver.gte(getPnpmVersion(), version) } +exports.hasPnpm3OrLater = () => { + return hasPnpmVersionOrLater('3.0.0') +} + +exports.hasPnpm4OrLater = () => { + return hasPnpmVersionOrLater('4.0.0') +} + exports.hasProjectPnpm = (cwd) => { if (_pnpmProjects.has(cwd)) { return checkPnpm(_pnpmProjects.get(cwd)) @@ -120,7 +128,7 @@ exports.hasProjectPnpm = (cwd) => { } function checkPnpm (result) { - if (result && !exports.hasPnpmXOrLater('3.0.0')) { + if (result && !exports.hasPnpm3OrLater()) { throw new Error(`The project seems to require pnpm${_hasPnpm ? ' >= 3' : ''} but it's not installed.`) } return result diff --git a/packages/@vue/cli-ui/apollo-server/util/command.js b/packages/@vue/cli-ui/apollo-server/util/command.js index 78aa935668..c0792d344d 100644 --- a/packages/@vue/cli-ui/apollo-server/util/command.js +++ b/packages/@vue/cli-ui/apollo-server/util/command.js @@ -1,14 +1,14 @@ const { hasYarn, hasProjectYarn, - hasPnpmXOrLater, + hasPnpm3OrLater, hasProjectPnpm } = require('@vue/cli-shared-utils') const { loadOptions } = require('@vue/cli/lib/options') exports.getCommand = function (cwd = undefined) { if (!cwd) { - return loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpmXOrLater('3.0.0') ? 'pnpm' : 'npm') + return loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpm3OrLater() ? 'pnpm' : 'npm') } return hasProjectYarn(cwd) ? 'yarn' : hasProjectPnpm(cwd) ? 'pnpm' : 'npm' } diff --git a/packages/@vue/cli/lib/Creator.js b/packages/@vue/cli/lib/Creator.js index d1056ba720..a2897f27ca 100644 --- a/packages/@vue/cli/lib/Creator.js +++ b/packages/@vue/cli/lib/Creator.js @@ -33,7 +33,7 @@ const { hasGit, hasProjectGit, hasYarn, - hasPnpmXOrLater, + hasPnpm3OrLater, logWithSpinner, stopSpinner, exit, @@ -116,7 +116,7 @@ module.exports = class Creator extends EventEmitter { cliOptions.packageManager || loadOptions().packageManager || (hasYarn() ? 'yarn' : null) || - (hasPnpmXOrLater('3.0.0') ? 'pnpm' : 'npm') + (hasPnpm3OrLater() ? 'pnpm' : 'npm') ) const pm = new PackageManager({ context, forcePackageManager: packageManager }) @@ -448,7 +448,7 @@ module.exports = class Creator extends EventEmitter { // ask for packageManager once const savedOptions = loadOptions() - if (!savedOptions.packageManager && (hasYarn() || hasPnpmXOrLater('3.0.0'))) { + if (!savedOptions.packageManager && (hasYarn() || hasPnpm3OrLater())) { const packageManagerChoices = [] if (hasYarn()) { @@ -459,7 +459,7 @@ module.exports = class Creator extends EventEmitter { }) } - if (hasPnpmXOrLater('3.0.0')) { + if (hasPnpm3OrLater()) { packageManagerChoices.push({ name: 'Use PNPM', value: 'pnpm', diff --git a/packages/@vue/cli/lib/util/ProjectPackageManager.js b/packages/@vue/cli/lib/util/ProjectPackageManager.js index 7ee0ad43db..95aa10a12a 100644 --- a/packages/@vue/cli/lib/util/ProjectPackageManager.js +++ b/packages/@vue/cli/lib/util/ProjectPackageManager.js @@ -10,7 +10,8 @@ const chalk = require('chalk') const { hasYarn, hasProjectYarn, - hasPnpmXOrLater, + hasPnpm3OrLater, + hasPnpm4OrLater, hasProjectPnpm } = require('@vue/cli-shared-utils/lib/env') const { isOfficialPlugin, resolvePluginId } = require('@vue/cli-shared-utils/lib/pluginResolution') @@ -51,7 +52,7 @@ const PACKAGE_MANAGER_CONFIG = { upgrade: ['update', '--loglevel', 'error'], remove: ['uninstall', '--loglevel', 'error'] }, - pnpm: hasPnpmXOrLater('4.0.0') ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, + pnpm: hasPnpm4OrLater ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, yarn: { install: [], add: ['add'], @@ -81,7 +82,7 @@ class PackageManager { } else if (context) { this.bin = hasProjectYarn(context) ? 'yarn' : hasProjectPnpm(context) ? 'pnpm' : 'npm' } else { - this.bin = loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpmXOrLater('3.0.0') ? 'pnpm' : 'npm') + this.bin = loadOptions().packageManager || (hasYarn() ? 'yarn' : hasPnpm3OrLater() ? 'pnpm' : 'npm') } if (!SUPPORTED_PACKAGE_MANAGERS.includes(this.bin)) { diff --git a/packages/@vue/cli/lib/util/clearConsole.js b/packages/@vue/cli/lib/util/clearConsole.js index 5079c4c4fa..10c3632835 100644 --- a/packages/@vue/cli/lib/util/clearConsole.js +++ b/packages/@vue/cli/lib/util/clearConsole.js @@ -2,7 +2,7 @@ const chalk = require('chalk') const execa = require('execa') const semver = require('semver') const getVersions = require('./getVersions') -const { clearConsole, hasYarn, hasPnpmXOrLater } = require('@vue/cli-shared-utils') +const { clearConsole, hasYarn, hasPnpm3OrLater } = require('@vue/cli-shared-utils') async function getInstallationCommand () { if (hasYarn()) { @@ -12,7 +12,7 @@ async function getInstallationCommand () { } } - if (hasPnpmXOrLater('3.0.0')) { + if (hasPnpm3OrLater()) { const { stdout: pnpmGlobalPrefix } = await execa('pnpm', ['config', 'get', 'prefix']) if (__dirname.includes(pnpmGlobalPrefix) && __dirname.includes('pnpm-global')) { return `pnpm i -g` diff --git a/packages/@vue/cli/lib/util/loadCommand.js b/packages/@vue/cli/lib/util/loadCommand.js index 194b8bc7be..1253bbcb69 100644 --- a/packages/@vue/cli/lib/util/loadCommand.js +++ b/packages/@vue/cli/lib/util/loadCommand.js @@ -11,11 +11,11 @@ module.exports = function loadCommand (commandName, moduleName) { } catch (err2) { if (isNotFoundError(err2)) { const chalk = require('chalk') - const { hasYarn, hasPnpmXOrLater } = require('@vue/cli-shared-utils') + const { hasYarn, hasPnpm3OrLater } = require('@vue/cli-shared-utils') let installCommand = `npm install -g` if (hasYarn()) { installCommand = `yarn global add` - } else if (hasPnpmXOrLater('3.0.0')) { + } else if (hasPnpm3OrLater()) { installCommand = `pnpm install -g` } console.log() From f1cc9edb7b03ad4ca6d08fd89c82a78f07975813 Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Mon, 14 Oct 2019 14:07:32 +0200 Subject: [PATCH 12/16] fix: function call correction --- packages/@vue/cli/lib/util/ProjectPackageManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli/lib/util/ProjectPackageManager.js b/packages/@vue/cli/lib/util/ProjectPackageManager.js index 95aa10a12a..b4feb3d5b0 100644 --- a/packages/@vue/cli/lib/util/ProjectPackageManager.js +++ b/packages/@vue/cli/lib/util/ProjectPackageManager.js @@ -52,7 +52,7 @@ const PACKAGE_MANAGER_CONFIG = { upgrade: ['update', '--loglevel', 'error'], remove: ['uninstall', '--loglevel', 'error'] }, - pnpm: hasPnpm4OrLater ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, + pnpm: hasPnpm4OrLater() ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, yarn: { install: [], add: ['add'], From bde6d3ba4fab272e2a85d59331406d92448f7b7b Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Mon, 14 Oct 2019 14:13:55 +0200 Subject: [PATCH 13/16] refactor: export hasPnpmVersionOrLater and use this in favor of hasPnpm4OrLater --- packages/@vue/cli-shared-utils/lib/env.js | 8 ++------ packages/@vue/cli/lib/util/ProjectPackageManager.js | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 924b934618..b5d0f2450e 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -98,7 +98,7 @@ function getPnpmVersion () { return _pnpmVersion || '0.0.0' } -function hasPnpmVersionOrLater (version) { +exports.hasPnpmVersionOrLater = (version) => { if (process.env.VUE_CLI_TEST) { return true } @@ -109,11 +109,7 @@ function hasPnpmVersionOrLater (version) { } exports.hasPnpm3OrLater = () => { - return hasPnpmVersionOrLater('3.0.0') -} - -exports.hasPnpm4OrLater = () => { - return hasPnpmVersionOrLater('4.0.0') + return this.hasPnpmVersionOrLater('3.0.0') } exports.hasProjectPnpm = (cwd) => { diff --git a/packages/@vue/cli/lib/util/ProjectPackageManager.js b/packages/@vue/cli/lib/util/ProjectPackageManager.js index b4feb3d5b0..ce4865ad71 100644 --- a/packages/@vue/cli/lib/util/ProjectPackageManager.js +++ b/packages/@vue/cli/lib/util/ProjectPackageManager.js @@ -11,7 +11,7 @@ const { hasYarn, hasProjectYarn, hasPnpm3OrLater, - hasPnpm4OrLater, + hasPnpmVersionOrLater, hasProjectPnpm } = require('@vue/cli-shared-utils/lib/env') const { isOfficialPlugin, resolvePluginId } = require('@vue/cli-shared-utils/lib/pluginResolution') @@ -52,7 +52,7 @@ const PACKAGE_MANAGER_CONFIG = { upgrade: ['update', '--loglevel', 'error'], remove: ['uninstall', '--loglevel', 'error'] }, - pnpm: hasPnpm4OrLater() ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, + pnpm: hasPnpmVersionOrLater('4.0.0') ? PACKAGE_MANAGER_PNPM4_CONFIG : PACKAGE_MANAGER_PNPM3_CONFIG, yarn: { install: [], add: ['add'], From 5209501bfd0e5a81b742eace3853b15a1b72209f Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Mon, 14 Oct 2019 16:11:22 +0200 Subject: [PATCH 14/16] refactor: move cache getter into getPnpmVersion --- packages/@vue/cli-shared-utils/lib/env.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index b5d0f2450e..de5b383929 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -86,6 +86,9 @@ const _pnpmProjects = new LRU({ }) function getPnpmVersion () { + if (_pnpmVersion != null) { + return _pnpmVersion + } try { _pnpmVersion = execSync('pnpm --version', { stdio: ['pipe', 'pipe', 'ignore'] @@ -102,9 +105,6 @@ exports.hasPnpmVersionOrLater = (version) => { if (process.env.VUE_CLI_TEST) { return true } - if (_pnpmVersion != null) { - return semver.gte(_pnpmVersion, version) - } return semver.gte(getPnpmVersion(), version) } From a72bf7ee8715ec80a9075628014459b70926369d Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Tue, 15 Oct 2019 11:30:06 +0200 Subject: [PATCH 15/16] refactor: add comment --- packages/@vue/cli-shared-utils/lib/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index de5b383929..3cd7e8b73c 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -84,7 +84,7 @@ const _pnpmProjects = new LRU({ max: 10, maxAge: 1000 }) - +// remove function getPnpmVersion () { if (_pnpmVersion != null) { return _pnpmVersion From 265c04dda04a8b1928dfc9d20ac3270f6fdbf89f Mon Sep 17 00:00:00 2001 From: B4rtware <34386047+B4rtware@users.noreply.github.com> Date: Tue, 15 Oct 2019 11:31:40 +0200 Subject: [PATCH 16/16] refactor: remove comment --- packages/@vue/cli-shared-utils/lib/env.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-shared-utils/lib/env.js b/packages/@vue/cli-shared-utils/lib/env.js index 3cd7e8b73c..de5b383929 100644 --- a/packages/@vue/cli-shared-utils/lib/env.js +++ b/packages/@vue/cli-shared-utils/lib/env.js @@ -84,7 +84,7 @@ const _pnpmProjects = new LRU({ max: 10, maxAge: 1000 }) -// remove + function getPnpmVersion () { if (_pnpmVersion != null) { return _pnpmVersion