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
- Reinstall the matching @vitest/coverage-v8 (or istanbul) at the same version as vitest.
- In a monorepo, run pnpm build for the coverage package so the dist default export is generated.
- Clear node_modules/.vite and the coverage cache, then reinstall.
- 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
- Keep @vitest/coverage-* versions aligned with vitest.
- Rebuild coverage packages in a monorepo before running coverage.
- Clear caches after dependency changes.
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
- Something removed the coverage directory
- Something removed the coverage directory
- Test worker should expose "runTests" method. Received
- Cannot parse ' ' because "module.stripTypeScriptTypes" is…
- Custom CoverageProviderModule loaded from
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)