Skip to content

fix(create): keep aliased vite in pnpm monorepo website so override stays effective#1728

Merged
fengmk2 merged 5 commits into
mainfrom
fix/create-pnpm-monorepo-vite-override
Jun 1, 2026
Merged

fix(create): keep aliased vite in pnpm monorepo website so override stays effective#1728
fengmk2 merged 5 commits into
mainfrom
fix/create-pnpm-monorepo-vite-override

Conversation

@fengmk2
Copy link
Copy Markdown
Member

@fengmk2 fengmk2 commented Jun 1, 2026

Summary

In a monorepo created via vp create vite:monorepo with pnpm, running vp why vite reported the override as ineffective: it resolved vite to upstream vite (a transitive dependency of @voidzero-dev/vite-plus-core) rather than to @voidzero-dev/vite-plus-core itself.

Root cause

PR #1697 added dropAliasedRuntimeDevDeps, which strips vite/vitest from apps/website/package.json for every package manager. For pnpm this removed the only direct vite dependency in a fresh workspace, so the pnpm-workspace.yaml overrides.vite: catalog: entry had no consumer to redirect. The only vite left in the tree was vite-plus-core's own internal vite, so vp why vite showed upstream vite and the override looked ineffective. The single-package app keeps vite: catalog: and resolves correctly.

npm / yarn / bun: confirmed not affected (no fix needed)

I verified their override is effective in both single-app and monorepo: node_modules/vite resolves to @voidzero-dev/vite-plus-core, and <pm> why @voidzero-dev/vite-plus-core shows it redirecting even vite-plus-test's peer vite. Their root overrides/resolutions redirect the transitive/peer vite regardless of a direct dependency. Their vp why vite display gap is a pre-existing limitation of npm explain / yarn why / bun why (they query by resolved package name, not the vite alias key), identical with or without the monorepo strip, so it is out of scope here.

Fix

dropAliasedRuntimeDevDeps now returns early for pnpm, keeping the aliased vite/vitest so the workspace override has a direct consumer. npm/yarn/bun keep stripping the dead-weight keys.

Before / after (vp why vite in a fresh pnpm monorepo)

Before:

vite@8.0.14
└─┬ @voidzero-dev/vite-plus-test@0.1.23
  └─┬ vite-plus@0.1.23
    ...
Found 1 version of vite

After:

@voidzero-dev/vite-plus-core@0.1.23
├─┬ @voidzero-dev/vite-plus-test@0.1.23
│ └─┬ vite-plus@0.1.23
│   └── website@0.0.0 (devDependencies)
...

Verification

  • New unit test packages/cli/src/create/__tests__/monorepo.spec.ts: failed for pnpm before the fix (vite stripped), now passes 4/4 (pnpm keeps, npm/yarn/bun drop).
  • Create + migration unit suite: 234/234 pass; lint clean.
  • End-to-end against a rebuilt global CLI: real vp create vite:monorepo + vp why vite now resolves to @voidzero-dev/vite-plus-core.
  • Global snap test new-vite-monorepo regenerated (website now keeps vite: catalog:); new-vite-monorepo-bun unchanged.
  • CI test-vp-create.yml assertion made pnpm-aware: pnpm must keep vite; npm/yarn/bun must drop vite/vitest.

Note

Low Risk
Scoped to monorepo scaffold post-processing and documentation; behavior change is intentional and covered by unit, snap, and CI checks.

Overview
pnpm monorepo create no longer strips aliased vite/vitest from apps/website/package.json. The logic moves into exported dropAliasedRuntimeDevDeps, which returns early for pnpm so workspace overrides still have a direct vite consumer (fixing misleading vp why vite after vp create vite:monorepo). npm, yarn, and bun still remove those keys after migration.

Migration guidance is updated in docs/guide/migrate.md, vp migrate help, and snap tests to say: on pnpm, keep migrator-aliased vite/vitest; on other package managers, remove them after import rewrites.

CI (test-vp-create.yml) now asserts pnpm keeps vite on the website app while other PMs must not. New monorepo.spec.ts covers pnpm vs npm/yarn/bun behavior; new-vite-monorepo snap expects vite: catalog: on the website.

Reviewed by Cursor Bugbot for commit 16f7d45. Configure here.

…tays effective

`vp create vite:monorepo` stripped vite/vitest from apps/website for every
package manager. For pnpm this removed the only direct `vite` dependency, so
the pnpm-workspace.yaml `overrides.vite: catalog:` entry had no consumer and
`vp why vite` resolved to upstream vite instead of @voidzero-dev/vite-plus-core,
making the override look ineffective.

Skip the strip for pnpm so the workspace override has a direct consumer. npm,
yarn, and bun are unaffected: their root overrides/resolutions redirect the
transitive/peer vite to @voidzero-dev/vite-plus-core regardless of a direct
dep (verified), so they keep dropping the dead-weight keys.
@fengmk2 fengmk2 self-assigned this Jun 1, 2026
@netlify
Copy link
Copy Markdown

netlify Bot commented Jun 1, 2026

Deploy Preview for viteplus-preview canceled.

Name Link
🔨 Latest commit 45dfe4c
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a1d297f7b986f0008157df5

…ompt

The migration prompt told agents to "remove old vite and vitest
dependencies" after rewriting imports. On pnpm that direct (aliased)
entry is what gives the pnpm-workspace.yaml `overrides.vite: catalog:`
a consumer to redirect, so removing it makes `vp why vite` report
upstream vite and the override look ineffective.

Reword the prompt (in both docs/guide/migrate.md and the CLI-printed
copy) to keep the aliased entries on pnpm; other package managers can
still drop them once import rewrites are confirmed. Regenerate the two
migration snap tests that capture the printed prompt.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 1, 2026

✅ Staging deployment successful!

Preview: https://viteplus-staging.void.app/
Commit: 45dfe4c

@fengmk2
Copy link
Copy Markdown
Member Author

fengmk2 commented Jun 1, 2026

@cursor review

Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 16f7d45. Configure here.

@fengmk2 fengmk2 marked this pull request as ready for review June 1, 2026 02:57
@fengmk2 fengmk2 requested a review from cpojer June 1, 2026 02:57
@fengmk2 fengmk2 merged commit adf79db into main Jun 1, 2026
56 checks passed
@fengmk2 fengmk2 deleted the fix/create-pnpm-monorepo-vite-override branch June 1, 2026 06:57
fengmk2 added a commit that referenced this pull request Jun 1, 2026
Release vite-plus v0.1.24.

A new `vp pm stage` publishing workflow, hardened installs and upgrades,
a Node-version mismatch reinstall prompt, and the bundled
vite/vitest/tsdown stack moves forward.

### Features

- `vp pm stage`: a new `vp pm` subcommand exposing npm's
staged-publishing workflow (upload a build to a staging area without
2FA, then approve or reject it from a trusted device); it maps to `pnpm
stage` / `npm stage` / `yarn npm ... --staged` per package manager, with
an npm fallback for yarn Classic and bun
([#1715](#1715)), by
@fengmk2
- `vp`: prompt to reinstall when up-to-date global packages were built
against a different Node.js than the active one (defaults to no); adds
`--reinstall-node-mismatch` and `--ignore-node-mismatch`, and skips the
prompt in CI
([#1666](#1666)), by
@liangmiQwQ
- `vp format`: add `format` as a visible alias of `vp fmt`, so the
common slip `vp format` resolves correctly and `vp format --init` /
`--migrate` apply the same `vite.config.ts` wiring as `vp fmt`
([#1727](#1727)), by
@semimikoh

### Fixes & Enhancements

- `vp install` / Node runtime download: HTTP retries now wrap the whole
body stream, hash verification, and archive extraction (not just the
request headers), so truncated or corrupt downloads of package managers
and Node are re-fetched instead of failing on the first attempt
([#1719](#1719)), by
@fengmk2
- `vp upgrade --force` on Windows: install into a fresh directory before
repointing `current`, so the forced reinstall no longer fails trying to
overwrite the running `vp.exe`
([#1714](#1714)), by
@fengmk2
- `vp install -g`: install global packages directly into their final
prefix instead of a temp dir that gets moved, so packages whose
postinstall scripts bake in absolute or relative temp paths still
resolve their bins; a failed package in a multi-package install no
longer removes the shims of the ones that already succeeded
([#1698](#1698)), by
@liangmiQwQ
- `vp why`: remove the `-g` / `--global` flag, which delegated to the
package manager's global mode and ignored Vite+-managed global packages;
`vp why` stays project-scoped while `vp outdated -g` keeps using the
managed global flow
([#1720](#1720)), by
@liangmiQwQ
- Windows installer: remove the existing `current` link via PowerShell
(detecting junctions, symlinks, and stale directories) instead of `cmd
/c rmdir`, which could fail with "The directory is not empty"
([#1726](#1726)), by
@TheAlexLichter
- `vp create`: skip editor-config detection and package-local editor
settings by default when creating a project inside an existing monorepo;
`--editor <name>` stays an explicit opt-in and `--no-editor` an opt-out
([#1729](#1729)), by
@jong-kyung
- `vp create vite:monorepo` (pnpm): keep the aliased `vite`/`vitest` in
the website app's `package.json` so the workspace `overrides.vite:
catalog:` has a direct consumer and `vp why vite` resolves to
`@voidzero-dev/vite-plus-core`; npm/yarn/bun still drop the dead-weight
keys ([#1728](#1728)), by
@fengmk2
- `vp pack`: rewrite direct `createRequire(...)("picomatch")` calls in
bundled tsdown output to the local bundled CJS entry, so packing no
longer depends on an undeclared runtime `picomatch` under pnpm `hoist:
false` ([#1732](#1732)),
by @fengmk2
- `vp migrate`: resolve a `catalog:` husky pin from the workspace
catalog (`pnpm-workspace.yaml`, `.yarnrc.yml`, or `package.json`
catalogs) during the git-hooks preflight, so a compatible catalog-pinned
husky no longer triggers a false "could not determine husky version"
warning and skips hook setup
([#1710](#1710)), by
@fengmk2

### Docs

- Add a **Copy Prompt** button to the docs site that copies an
AI-friendly getting-started prompt (intro, `llms-full.txt` pointer,
install commands, and core `vp` commands) for handing straight to a
coding agent
([#1706](#1706)), by
@fengmk2
- Update `troubleshooting.md`: `vite.config.ts` related issues are
resolved by updating oxlint and oxfmt
([#1708](#1708)), by
@leaysgur
- Clarify the product and repository documentation locations and the new
Run guide/config paths in `AGENTS.md`
([#1707](#1707)), by
@leaysgur

### Chore

- `vp` install: reduce retained `vp` versions from 5 to 3 across the
installer, `vp upgrade`, and the shell/PowerShell bootstrap scripts
(active and previous versions stay protected for rollback); document the
3-version retention and `vp upgrade --rollback`
([#1716](#1716)), by
@fengmk2
- Exclude the snap-tests directory from Vitest config discovery so the
VS Code Vitest extension stops generating a stray
`.vitest-plugin-loaded` file
([#1723](#1723)), by
@liangmiQwQ
- Refresh trusted stack stats on the docs homepage
([#1734](#1734)), by
@voidzero-guard[bot]
- Update @wan9chi's GitHub handle (formerly `branchseer`)
([#1705](#1705)), by
@wan9chi
- Update GitHub Actions
([#1724](#1724),
[#1730](#1730)), by
@renovate[bot]
- Upgrade upstream dependencies: vite `8.0.14 → 8.0.16`, vitest `4.1.7 →
4.1.8`, tsdown `0.22.0 → 0.22.1`, `@vitejs/devtools` `0.2.0 → 0.3.1`
([#1713](#1713),
[#1735](#1735),
[#1737](#1737)), by
@voidzero-guard[bot]

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| vite | `8.0.16` |
[`f94df87`](vitejs/vite@f94df87)
|
| rolldown | `1.0.3` |
[`a287faa`](rolldown/rolldown@a287faa)
|
| tsdown | `0.22.1` | [npm](https://npmx.dev/package/tsdown/v/0.22.1) |
| vitest | `4.1.8` | [npm](https://npmx.dev/package/vitest/v/4.1.8) |
| oxlint | `1.67.0` | [npm](https://npmx.dev/package/oxlint/v/1.67.0) |
| oxlint-tsgolint | `0.23.0` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/0.23.0) |
| oxfmt | `0.52.0` | [npm](https://npmx.dev/package/oxfmt/v/0.52.0) |

### New Contributors

Welcome to our new contributor @semimikoh! 🎉

**Full Changelog**:
v0.1.23...v0.1.24

Merging this PR will trigger the release workflow.

---------

Co-authored-by: voidzero-guard[bot] <278573678+voidzero-guard[bot]@users.noreply.github.com>
Co-authored-by: MK <fengmk2@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants