voidzero-dev / voidzero-dev/vite-plus

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

オープン
#2,307 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
pending triage
主要言語
Rust
スター
5.8k
フォーク
262
平均マージ
23時間 41分
マージ済み PR(30日)
138

説明

### 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:

```text
[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

- Implementation that introduced/patched the resolver: https://github.com/voidzero-dev/vite-plus/pull/356
- Auto-inline matcher: https://github.com/voidzero-dev/vite-plus/pull/1113
- `lazyPlugins` (user plugins only): https://github.com/voidzero-dev/vite-plus/pull/1215

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

vite-plus から defineConfig をインポートする vite.config.ts で問題を再現し、plugin timings を有効にして vp build を実行します。PR 356 と 1113 の resolver および auto-inline matcher の変更を読み、続いて vp build、vp dev、vp test がそれらをどのように注入するかを追跡します。完了の条件は、テスト以外のコマンドで Vitest 専用のプラグインが発生しなくなるか、文書化された opt-out があることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
bun, typescript
領域
build-system, tooling
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
52/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。