vuejs/vue-cli · error · Error

Expected string or integer value.

Error message

Expected string or integer value.

What it means

PluginAPI.assertVersion(range) lets a plugin declare which @vue/cli-service major it supports. When `range` is a number it is treated as a major version and expanded to `^N.0.0-0`, which only makes sense for an integer. A non-integer number (e.g. 4.5) is ambiguous and is rejected up front.

Source

Thrown at packages/@vue/cli-service/lib/PluginAPI.js:27

class PluginAPI {
  /**
   * @param {string} id - Id of the plugin.
   * @param {Service} service - A vue-cli-service instance.
   */
  constructor (id, service) {
    this.id = id
    this.service = service
  }

  get version () {
    return require('../package.json').version
  }

  assertVersion (range) {
    if (typeof range === 'number') {
      if (!Number.isInteger(range)) {
        throw new Error('Expected string or integer value.')
      }
      range = `^${range}.0.0-0`
    }
    if (typeof range !== 'string') {
      throw new Error('Expected string or integer value.')
    }

    if (semver.satisfies(this.version, range, { includePrerelease: true })) return

    throw new Error(
      `Require @vue/cli-service "${range}", but was loaded with "${this.version}".`
    )
  }

  /**
   * Current working directory.
   */
  getCwd () {

View on GitHub (pinned to 7eb93c169c)

Solutions

  1. Pass an integer major: `api.assertVersion(4)`.
  2. Or pass a semver range string for finer control: `api.assertVersion('^4.5.0')`.
  3. Update the offending plugin to a version that calls assertVersion correctly.

Example fix

// before
api.assertVersion(4.5)
// after
api.assertVersion('^4.5.0')
Defensive patterns

Strategy: type-guard

Validate before calling

const range = myRange
if (typeof range === 'number' && !Number.isInteger(range)) {
  throw new Error('assertVersion number must be an integer major')
}

Type guard

const isVersionRange = (r) => typeof r === 'string' || (typeof r === 'number' && Number.isInteger(r))

Prevention

When it happens

Trigger: A plugin calling `api.assertVersion(4.5)` (or any float) instead of an integer major or a semver range string.

Common situations: A plugin author misreading the API and passing a feature/version float; dynamically computed ranges producing a float.

Related errors


AI-assisted analysis of vuejs/vue-cli@7eb93c169c (2026-08-13). Data as JSON: /api/errors/6e46e3344e4bf1dc. Report an issue: GitHub.