@fuf-stack/vitest-config

中文文档
5.1.0发布于 2026/11/13MITTypeScriptES Module构建来源已验证近 30 天下载 3803

default vitest config for a Fröhlich ∧ Frei repo

原始使用文档
文档目录7 节
  1. @fuf-stack/vitest-config
  2. Configs Available
  3. Install
  4. Usage
  5. Why .mts Extension?
  6. Scripts
  7. License

@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

# npm
npm i -D @fuf-stack/vitest-config vitest @vitest/coverage-v8

# yarn
yarn add -D @fuf-stack/vitest-config vitest @vitest/coverage-v8

Usage

Important: Use .mts extension for config files when importing this ESM-only package. Using .ts may cause bundler errors as tooling might attempt to use require() instead of import.

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/!(config)', 'packages/config/*']
  • Coverage configuration with sensible defaults
  • LCOV reporter

packages/config is a container, not a test project. Its child packages are included individually so their tests run once under their own package names.

Customize if needed:

Use mergeConfig to adjust settings while retaining the default project discovery:

// vitest.config.mts
import { mergeConfig } from 'vitest/config';

import workspaceConfig from '@fuf-stack/vitest-config/workspace';

export default mergeConfig(workspaceConfig, {
  test: {
    testTimeout: 10_000,
  },
});

Add a project outside the default paths:

For an existing test project in tools/integration-tests, add its directory relative to the workspace root. mergeConfig concatenates arrays, so this extends projects while keeping the default app and package projects:

// vitest.config.mts
import { mergeConfig } from 'vitest/config';

import workspaceConfig from '@fuf-stack/vitest-config/workspace';

export default mergeConfig(workspaceConfig, {
  test: {
    projects: ['tools/integration-tests'],
  },
});

The directory can provide its own vitest.config.mts for project-specific settings.

Add inline projects and extra coverage paths:

The same applies to inline projects and to coverage.include / coverage.exclude: your entries are appended to the defaults. Don't spread the base config manually.

// vitest.config.mts
import { mergeConfig } from 'vitest/config';

import workspaceConfig from '@fuf-stack/vitest-config/workspace';

export default mergeConfig(workspaceConfig, {
  test: {
    projects: [
      {
        test: {
          name: 'scripts',
          include: ['scripts/**/*.test.mjs'],
          environment: 'node',
        },
      },
    ],
    coverage: {
      include: ['scripts/**/*.mjs'],
    },
  },
});

The default coverage excludes already match *.test.* / *.spec.* files of every JS/TS extension anywhere in the workspace, so extra includes don't need matching test excludes.

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 native resolve.tsconfigPaths)
  • 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

  1. Root config: Use /workspace import
  2. Package configs: Use /project import (or customize with mergeConfig)
  3. Rename config files: Change .ts → .mts (required for ESM-only packages)
  4. Remove vitest.workspace.ts file
  5. Ensure each package uses defineProject() (handled by /project config)

Why .mts Extension?

This package is ESM-only ("type": "module"). When Vitest bundles config files:

  • .ts files are ambiguous - bundlers may try require() ❌
  • .mts explicitly declares ES Module - uses import ✅

Using .ts may result in errors like:

Error: Cannot use import statement outside a module

The .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

版本与发布记录

@fuf-stack/vitest-config 共发布 38 个版本,首次发布于 2024/04/03;过去 12 个月发布了 15 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
5.1.0latest2026/11/132 天前
5.0.82026/10/2224 天前
5.0.72026/10/121 个月前
5.0.62026/09/231 个月前
5.0.52026/09/211 个月前
5.0.42026/07/173 个月前

关于 @fuf-stack/vitest-config 的常见问题

@fuf-stack/vitest-config 是什么?

default vitest config for a Fröhlich ∧ Frei repo

如何安装 @fuf-stack/vitest-config?

在项目目录运行 npm install @fuf-stack/vitest-config,或使用 pnpm add / yarn add / bun add。

@fuf-stack/vitest-config 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@fuf-stack/vitest-config 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@fuf-stack/vitest-config 可以商用吗?

@fuf-stack/vitest-config 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@fuf-stack/vitest-config 的下载量有多少?

根据 npm 官方下载统计,@fuf-stack/vitest-config 在 2026/10/16 – 2026/11/14 这 30 天内被下载 3,803 次,日均约 127 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@fuf-stack/vitest-config 还在维护吗?

最新版本 5.1.0 发布于 2026/11/13(2 天前);至今共发布 38 个版本,其中过去 12 个月发布了 15 个;首次发布于 2024/04/03。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。