Skip to content

defineConfig always injects vite-plus:vitest-resolver into vp build / vp dev even when Vitest isn't used #2307

Description

@cursor

Describe the bug

defineConfig from vite-plus always prepends Vitest-only plugins into every Vite config, including for vp build / vp dev:

  • vite-plus:vitest-resolver
  • vite-plus:auto-inline-matcher
  • vite-plus:coverage-version-guard

Projects that use Vite+ for toolchain (fmt / lint / build) but run tests with another runner (e.g. Bun's bun:test) still pay for these plugins on every production build.

Rolldown/Vite plugin timings report:

[PLUGIN_TIMINGS] Your build spent significant time in plugins. Here is a breakdown:
  - vite-plus:vitest-resolver (87%)

The resolver is an enforce: "pre" resolveId hook, so it runs on every module resolve. It early-returns for non-vitest / @vitest/* ids, but with a large graph that still dominates plugin time.

There is no documented opt-out. lazyPlugins only gates user plugins during config-metadata loads; it does not skip these injected plugins on build/dev. vite-plus/prefer-vite-plus-imports also pushes app configs to import defineConfig from vite-plus rather than vite, so switching away isn't a clean escape hatch.

Reproduction

  1. Use import { defineConfig } from "vite-plus" in an app vite.config.ts
  2. Do not configure or run vp test / Vitest
  3. Run vp build (with plugin timings enabled)
  4. Observe vite-plus:vitest-resolver near the top of [PLUGIN_TIMINGS]

Expected

Vitest helper plugins should only be injected when running tests (vp test / Vitest), or there should be an explicit opt-out for projects that don't use Vitest.

System Info

  • vite-plus: 0.2.5
  • Tests: Bun (bun:test), not Vitest
  • Apps build via vp build

Suggested fix

  • Gate injection on test command / presence of test config, or
  • Add a config flag such as test: false / vitest: false to skip injection, or
  • Document a supported way to opt out without fighting prefer-vite-plus-imports

Related

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions