{"record":{"id":"d2e629918e065e0f","repo":"vuejs/vue-cli","slug":"require-global-vue-cli-range-but-was-invoke","errorCode":null,"errorMessage":"Require global @vue/cli \"${range}\", but was invoked by \"${this.cliVersion}\".","messagePattern":"Require global @vue/cli \"(.+?)\", but was invoked by \"(.+?)\"\\.","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/@vue/cli/lib/GeneratorAPI.js","lineNumber":125,"sourceCode":"\n  get cliVersion () {\n    return require('../package.json').version\n  }\n\n  assertCliVersion (range) {\n    if (typeof range === 'number') {\n      if (!Number.isInteger(range)) {\n        throw new Error('Expected string or integer value.')\n      }\n      range = `^${range}.0.0-0`\n    }\n    if (typeof range !== 'string') {\n      throw new Error('Expected string or integer value.')\n    }\n\n    if (semver.satisfies(this.cliVersion, range, { includePrerelease: true })) return\n\n    throw new Error(\n      `Require global @vue/cli \"${range}\", but was invoked by \"${this.cliVersion}\".`\n    )\n  }\n\n  get cliServiceVersion () {\n    // In generator unit tests, we don't write the actual file back to the disk.\n    // So there is no cli-service module to load.\n    // In that case, just return the cli version.\n    if (process.env.VUE_CLI_TEST && process.env.VUE_CLI_SKIP_WRITE) {\n      return this.cliVersion\n    }\n\n    const servicePkg = loadModule(\n      '@vue/cli-service/package.json',\n      this.generator.context\n    )\n\n    return servicePkg.version","sourceCodeStart":107,"sourceCodeEnd":143,"githubUrl":"https://github.com/vuejs/vue-cli/blob/7eb93c169c7520935252e2473387f923ef80d856/packages/@vue/cli/lib/GeneratorAPI.js#L107-L143","documentation":"Thrown by assertCliVersion when the globally installed @vue/cli version does not satisfy the semver range required by the calling plugin/generator. The method compares the current CLI version against the range using semver.satisfies with includePrerelease, and throws if it fails.","triggerScenarios":"A plugin generator calls assertCliVersion('^4.0.0') but the user is running @vue/cli 3.x globally. Or assertCliVersion(5) is called when the global CLI is version 4.5.0.","commonSituations":"User upgrades a plugin that requires a newer CLI version but hasn't upgraded the global @vue/cli package. Mismatch between globally installed CLI and plugin version requirements after a team updates dependencies.","solutions":["Upgrade the global @vue/cli to satisfy the required range: npm install -g @vue/cli@latest (or yarn global add @vue/cli).","If you cannot upgrade, downgrade the plugin to a version compatible with your current CLI.","Check your CLI version with `vue --version` and compare it to the range in the error message."],"exampleFix":"# before\n$ vue --version  # 3.12.1\nplugin requires ^4.0.0\n# after\n$ npm install -g @vue/cli@4\n$ vue --version  # 4.5.15","handlingStrategy":"validation","validationCode":"const semver = require('semver');\nconst currentVersion = require('@vue/cli/package.json').version;\nif (!semver.satisfies(currentVersion, requiredRange, { includePrerelease: true })) {\n  console.warn(`@vue/cli ${currentVersion} does not satisfy ${requiredRange}. Upgrade with: npm i -g @vue/cli@latest`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  generatorAPI.assertCliVersion('^4.0.0');\n} catch (e) {\n  if (e.message.includes('Require global @vue/cli')) {\n    console.error('CLI version mismatch. Run: npm install -g @vue/cli@latest');\n    process.exit(1);\n  }\n  throw e;\n}","preventionTips":["Check your CLI version with `vue --version` before running plugins with version requirements.","Keep the global @vue/cli updated alongside plugin updates.","Document the required CLI version in your plugin README."],"tags":["version","cli","environment","semver","plugin-api"],"backgroundTag":null,"analyzedSha":"7eb93c169c7520935252e2473387f923ef80d856","analyzedAt":"2026-08-13T10:13:37.803Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}