vitest-dev/vitest · error · Error
createNodeImportMeta is not supported in this version of…
Error message
createNodeImportMeta is not supported in this version of Vite.
What it means
Vitest's `createNodeImportMeta` relies on Vite's `createDefaultImportMeta` export from `vite/module-runner`. If the installed Vite version does not export that function (it was added in a later Vite), this error fires immediately. It signals a peer-dependency version mismatch between Vitest and Vite.
Solutions
- Upgrade Vite to the version Vitest declares in its `peerDependencies` (check `packages/vitest/package.json`).
- Run `pnpm why vite` / `npm ls vite` to find and deduplicate a stray older Vite.
- If overriding Vite intentionally, downgrade Vitest to a version compatible with the installed Vite.
- Ensure `node_modules/vite` and `node_modules/vitest/node_modules/vite` resolve to the same version.
Example fix
// before - package.json
"devDependencies": { "vite": "^5.0.0", "vitest": "^3.0.0" }
// after
"devDependencies": { "vite": "^6.0.0", "vitest": "^3.0.0" } Defensive patterns
Strategy: validation
Validate before calling
import * as v from 'vite/module-runner'; if (typeof v.createDefaultImportMeta !== 'function') throw new Error('upgrade Vite to a version exporting createDefaultImportMeta') Type guard
function supportsCreateDefaultImportMeta(m: typeof import('vite/module-runner')): boolean { return typeof m.createDefaultImportMeta === 'function' } Try / catch
null
Prevention
- Keep Vite aligned with the version in Vitest's `peerDependencies`.
- Run `npm ls vite`/`pnpm why vite` after upgrades to detect duplicates.
- Pin `engines` and peer ranges in CI to catch mismatches at install.
When it happens
Trigger: Vitest resolves `viteModuleRunner.createDefaultImportMeta` as undefined at moduleRunner.ts:18 because the installed Vite is older than what Vitest expects. This is checked once when `createNodeImportMeta` is first called during module runner construction.
Common situations: Pinning Vite to an old version while upgrading Vitest; a monorepo where a different workspace's Vite version wins in resolution; `overrides`/`resolutions` forcing a stale Vite; using a Vitest canary that depends on an unreleased Vite API.
Related errors
- Cannot find environment for
- Failed to import test file
- Pool " " cannot run with "experimental.viteModuleRunner…
- require() is not supported in virtual modules. Trying to…
- The environment was not defined in the Vite config.
AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11).
Data as JSON: /api/errors/1a9310634332a31a.
Report an issue: GitHub.
Appendix: 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 1fa9837ec2)