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

  1. Upgrade Vite to the version Vitest declares in its `peerDependencies` (check `packages/vitest/package.json`).
  2. Run `pnpm why vite` / `npm ls vite` to find and deduplicate a stray older Vite.
  3. If overriding Vite intentionally, downgrade Vitest to a version compatible with the installed Vite.
  4. 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

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


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)