vitest-dev/vitest · critical · Error
createNodeImportMeta is not supported in this version of Vit
Error message
createNodeImportMeta is not supported in this version of Vite.
What it means
`createNodeImportMeta` (`moduleRunner.ts:19`) depends on Vite's `createDefaultImportMeta` export to build `import.meta` for evaluated modules. If the installed Vite version doesn't export it (older Vite), this `Error` is thrown as a hard version-compatibility guard. Vitest's module runner needs a recent enough Vite.
Source
Thrown at packages/vitest/src/runtime/moduleRunner/moduleRunner.ts:19
import type { MockedModule } from '@vitest/mocker'
import type vm from 'node:vm'
import type { EvaluatedModuleNode, EvaluatedModules, SSRImportMetadata } from 'vite/module-runner'
import type { WorkerGlobalState } from '../../types/worker'
import type { ExternalModulesExecutor } from '../external-executor'
import type { ModuleExecutionInfo } from './moduleDebug'
import type { VitestModuleEvaluator } from './moduleEvaluator'
import type { VitestTransportOptions } from './moduleTransport'
import type { TestModuleRunner } from './testModuleRunner'
import * as viteModuleRunner from 'vite/module-runner'
import { Traces } from '../../utils/traces'
import { VitestMocker } from './moduleMocker'
import { VitestTransport } from './moduleTransport'
import { injectQuery } from './utils'
export type CreateImportMeta = (modulePath: string) => viteModuleRunner.ModuleRunnerImportMeta | Promise<viteModuleRunner.ModuleRunnerImportMeta>
export const createNodeImportMeta: CreateImportMeta = (modulePath: string) => {
if (!viteModuleRunner.createDefaultImportMeta) {
throw new Error(`createNodeImportMeta is not supported in this version of Vite.`)
}
const defaultMeta = viteModuleRunner.createDefaultImportMeta(modulePath)
const href = defaultMeta.url
const importMetaResolver = createImportMetaResolver() ?? defaultMeta.resolve
return {
...defaultMeta,
main: false,
resolve(id: string, parent?: string) {
return importMetaResolver(id, parent ?? href)
},
}
}
function createImportMetaResolver() {
if (!import.meta.resolve) {View on GitHub (pinned to d568f8ce37)
Solutions
- Align Vite and Vitest versions per Vitest's peerDependencies (check `pnpm why vite` for duplicates).
- Reinstall `node_modules` to dedupe: `rm -rf node_modules && pnpm install`.
- Pin a compatible Vite in the workspace root.
Defensive patterns
Strategy: validation
Validate before calling
// Verify Vite exposes createDefaultImportMeta at startup.
import * as viteRunner from 'vite/module-runner'
if (typeof (viteRunner as any).createDefaultImportMeta !== 'function') {
throw new Error('Incompatible Vite version: createDefaultImportMeta missing. Align Vite/Vitest versions.')
} Prevention
- Keep Vite and Vitest versions aligned per Vitest's peerDependencies.
- After upgrading, reinstall node_modules to dedupe Vite.
- Run `pnpm why vite` in a monorepo to detect duplicate/older Vite versions.
When it happens
Trigger: Vitest wired against an older Vite that predates `createDefaultImportMeta`; a workspace where `createImportMeta` was set to `createNodeImportMeta` but Vite is too old.
Common situations: Upgrading Vitest without upgrading Vite (or vice versa); pnpm/npm deduplication pulling a stale Vite into the tree; a monorepo with mismatched versions.
Related errors
- Failed to import test file ${filepath}
- No codec found for type ${type}
- Unrecognized comparator ${comparator}
- `resolveOptions` has to be used in a test file
- Browser provider is not defined for the project "${child.pro
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/1a9310634332a31a.json.
Report an issue: GitHub.