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
- Pass an integer major: `api.assertVersion(4)`.
- Or pass a semver range string for finer control: `api.assertVersion('^4.5.0')`.
- 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
- Pass an integer major or a semver string to assertVersion — never a float.
- For sub-major requirements use a semver range string like '^4.5.0'.
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
- Require @vue/cli-service "${range}", but was loaded with "${
- Expected string or integer value.
- Require global @vue/cli "${range}", but was invoked by "${th
- Require @vue/cli-service "${range}", but was loaded with "${
- transpileDependencies only accepts an array of string or reg
AI-assisted analysis of vuejs/vue-cli@7eb93c169c (2026-08-13).
Data as JSON: /api/errors/6e46e3344e4bf1dc.
Report an issue: GitHub.