vitest-dev/vitest · error · Error

Failed to load . Default export is missing.

Error message

Failed to load ${CoverageProviderMap[provider]}. Default export is missing.

What it means

For built-in coverage providers (v8/istanbul) Vitest dynamically imports @vitest/coverage-v8 or @vitest/coverage-istanbul and reads the default export. If the module loads but its default export is undefined/falsy, this error fires naming the package that was expected. This indicates the package is present but broken or has the wrong shape.

Solutions

  1. Reinstall the matching @vitest/coverage-v8 (or istanbul) at the same version as vitest.
  2. In a monorepo, run pnpm build for the coverage package so the dist default export is generated.
  3. Clear node_modules/.vite and the coverage cache, then reinstall.
  4. Verify the package exports a default by running node -e "import('@vitest/coverage-v8').then(m=>console.log(typeof m.default))".

Example fix

// before: version skew
// vitest@2.x with @vitest/coverage-v8@1.x

// after: align versions
// $ pnpm add -D vitest@latest @vitest/coverage-v8@latest
Defensive patterns

Strategy: type-guard

Validate before calling

const m = await import('@vitest/coverage-v8')
if (!m.default) throw new Error('coverage package has no default export; reinstall/rebuild')

Type guard

function hasDefaultCoverageExport(m) {
  return m != null && m.default != null
}

Prevention

When it happens

Trigger: test.coverage.provider is 'v8' or 'istanbul', the corresponding @vitest/coverage-* package is installed and importable, but its default export resolves to undefined. This is almost always a corrupt build, a version skew between vitest and the coverage package, or a broken main/exports field in that package.

Common situations: A partial install or a failed pnpm build in the monorepo, a coverage package version that does not match the vitest version, or a faulty package.json exports map pointing at a file without a default export.

Related errors


AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11). Data as JSON: /api/errors/8c032ac66a1b9016. Report an issue: GitHub.

Appendix: source

Thrown at packages/vitest/src/utils/coverage.ts:76

    return null
  }

  const provider = options.provider

  if (provider === 'v8' || provider === 'istanbul') {
    let builtInModule = CoverageProviderMap[provider]

    if (loader.isBrowser) {
      builtInModule += '/browser'
    }

    const { default: coverageModule }
      = loader.isBrowser
        ? await loader.import(builtInModule)
        : await import(/* @vite-ignore */ builtInModule)

    if (!coverageModule) {
      throw new Error(
        `Failed to load ${CoverageProviderMap[provider]}. Default export is missing.`,
      )
    }

    return coverageModule
  }

  let customProviderModule

  try {
    customProviderModule = await loader.import(options.customProviderModule!)
  }
  catch (error) {
    throw new Error(
      `Failed to load custom CoverageProviderModule from ${options.customProviderModule}`,
      { cause: error },
    )
  }

View on GitHub (pinned to 1fa9837ec2)