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

  1. Align Vite and Vitest versions per Vitest's peerDependencies (check `pnpm why vite` for duplicates).
  2. Reinstall `node_modules` to dedupe: `rm -rf node_modules && pnpm install`.
  3. 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

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


AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03). Data as JSON: /data/errors/1a9310634332a31a.json. Report an issue: GitHub.