@fuf-stack/vitest-config
v4.1.3
Published
default vitest config for a Fröhlich ∧ Frei repo
Readme
@fuf-stack/vitest-config
Default Vitest configurations for Fröhlich ∧ Frei monorepos. Provides separate configs for workspace-level (root) and project-level (package) setups.
Compatible with Vitest 4.0+
Configs Available
Workspace Config (/workspace) - For monorepo root:
- Projects array defining workspace structure
- V8 coverage with explicit includes/excludes
- LCOV reporter for CI tools
Project Config (/project) - For individual packages:
- TypeScript path mapping resolution
- Node environment by default
- Clear mocks between tests
Install
# pnpm
pnpm add -D @fuf-stack/vitest-config vitest @vitest/coverage-v8 vite-tsconfig-paths
# npm
npm i -D @fuf-stack/vitest-config vitest @vitest/coverage-v8 vite-tsconfig-paths
# yarn
yarn add -D @fuf-stack/vitest-config vitest @vitest/coverage-v8 vite-tsconfig-pathsUsage
Important: Use
.mtsextension for config files when importing this ESM-only package. Using.tsmay cause bundler errors as tooling might attempt to userequire()instead ofimport.
Workspace Root Config
Use the workspace config in your monorepo root vitest.config.mts:
// vitest.config.mts (root)
import config from '@fuf-stack/vitest-config/workspace';
export default config;This provides:
- Projects array:
['apps/*', 'packages/*', 'packages/config/*'] - Coverage configuration with sensible defaults
- LCOV reporter
Customize if needed:
// vitest.config.mts
import { defineConfig, mergeConfig } from 'vitest/config';
import workspaceConfig from '@fuf-stack/vitest-config/workspace';
export default mergeConfig(
workspaceConfig,
defineConfig({
test: {
projects: ['packages/my-specific-package'],
},
}),
);Package-Level Configs
Use the project config in individual package vitest.config.mts:
// packages/my-package/vitest.config.mts
import config from '@fuf-stack/vitest-config/project';
export default config;This provides:
- TypeScript path mapping resolution (
vite-tsconfig-paths) - Node environment (good for libraries, utilities)
- Clear mocks between tests
For React components (need jsdom):
// packages/ui-components/vitest.config.mts
import { mergeConfig } from 'vitest/config';
import projectConfig from '@fuf-stack/vitest-config/project';
export default mergeConfig(projectConfig, {
test: {
environment: 'jsdom',
setupFiles: ['./vitest.setup.ts'],
},
});Migration from Vitest 3.x
- Root config: Use
/workspaceimport - Package configs: Use
/projectimport (or customize withmergeConfig) - Rename config files: Change
.ts→.mts(required for ESM-only packages) - Remove
vitest.workspace.tsfile - Ensure each package uses
defineProject()(handled by/projectconfig)
Why .mts Extension?
This package is ESM-only ("type": "module"). When Vitest bundles config files:
.tsfiles are ambiguous - bundlers may tryrequire()❌.mtsexplicitly declares ES Module - usesimport✅
Using .ts may result in errors like:
Error: Cannot use import statement outside a moduleThe .mts extension tells tooling to treat the file as an ES Module, allowing proper imports of ESM-only dependencies.
Scripts
{
"scripts": {
"test": "vitest",
"test:coverage": "vitest --coverage"
}
}License
MIT
