vuejs/vue · critical · Error
\n\nVue packages version mismatch:\n\n- vue@${vueVersion}\n-
Error message
\n\nVue packages version mismatch:\n\n- vue@${vueVersion}\n- ${packageName}@${packageVersion}\n\nThis may cause things to work incorrectly. Make sure to use the same version for both.\n What it means
Thrown at module-load time by vue-server-renderer's index.js when the resolved 'vue' package version differs from vue-server-renderer's own package.json version. The two packages are tightly coupled (shared internals, SSR compile helpers) and must ship at the same version. This runs synchronously during require(), so it aborts the process before any SSR code executes.
Source
Thrown at packages/server-renderer/index.js:8
try {
var vueVersion = require('vue').version
} catch (e) {}
var packageName = require('./package.json').name
var packageVersion = require('./package.json').version
if (vueVersion && vueVersion !== packageVersion) {
throw new Error(
'\n\nVue packages version mismatch:\n\n' +
'- vue@' +
vueVersion +
'\n' +
'- ' +
packageName +
'@' +
packageVersion +
'\n\n' +
'This may cause things to work incorrectly. Make sure to use the same version for both.\n'
)
}
if (process.env.NODE_ENV === 'production') {
module.exports = require('./build.prod.js')
} else {
module.exports = require('./build.dev.js')
}View on GitHub (pinned to 9e88707940)
Solutions
- Align both packages to the exact same version: npm install vue@2.7.16 vue-server-renderer@2.7.16 (use the same version string for both).
- Delete node_modules and the lockfile, then reinstall to resolve any dedupe drift.
- Run `npm ls vue vue-server-renderer` (or pnpm why vue) to find nested conflicting installations and dedupe them.
- If using a monorepo, ensure all workspaces resolve vue and vue-server-renderer to the same version via resolutions/overrides.
Example fix
// before (mismatched) // package.json: "vue": "2.6.14", "vue-server-renderer": "2.7.16" // after (aligned) // package.json: "vue": "2.7.16", "vue-server-renderer": "2.7.16" // then run: npm install
Defensive patterns
Strategy: validation
Validate before calling
const vueVersion = require('vue/package.json').version
const ssrVersion = require('vue-server-renderer/package.json').version
if (vueVersion !== ssrVersion) {
throw new Error(
`Refusing to start: vue@${vueVersion} vs vue-server-renderer@${ssrVersion}. ` +
`Run: npm install vue@${ssrVersion} vue-server-renderer@${ssrVersion}`
)
} Type guard
function versionsAligned(a: string, b: string): boolean {
return a === b
} Try / catch
// Version check throws at require() time — cannot try/catch around a transitive require easily.
// Validate before requiring:
const pkg = name => require(`${name}/package.json`).version
if (pkg('vue') !== pkg('vue-server-renderer')) {
process.exitCode = 1
console.error('Fix versions before continuing.')
} else {
require('vue-server-renderer')
} Prevention
- Pin vue and vue-server-renderer to the same exact version in package.json (no caret/tilde).
- Add a postinstall script that asserts version equality.
- In a monorepo, use resolutions/overrides to force a single vue version.
- Run `npm ls vue vue-server-renderer` in CI to detect drift.
When it happens
Trigger: require('vue-server-renderer') when node_modules contains vue@2.6.x and vue-server-renderer@2.7.x (or any mismatched pair). The version read from require('vue').version is compared to the package.json version of the server-renderer.
Common situations: A dependency upgrade bumps vue-server-renderer but leaves vue on the old version (or vice versa). npm/yarn dedupe resolves a nested different version. Lockfile drift after a partial upgrade. Using aliasing (webpack resolve.alias) that points vue to a different version than what node_modules resolves.
Related errors
- \n\nVue packages version mismatch:\n\n- vue@${vueVersion} ($
- [@vue/compiler-sfc] SFC contains no <script> tags.
- [@vue/compiler-sfc] <script> and <script setup> must have th
- [@vue/compiler-sfc] ${msg}\n\n${filename}\n${generateCodeFra
- Invalid JSON bundle file: ${bundle}
AI-assisted analysis of vuejs/vue@9e88707940 (2026-08-11).
Data as JSON: /api/errors/91af183399839bcc.
Report an issue: GitHub.