fix(create): keep aliased vite in pnpm monorepo website so override stays effective#1728
Merged
Merged
Conversation
…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.
✅ Deploy Preview for viteplus-preview canceled.
|
…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.
Contributor
|
✅ Staging deployment successful! Preview: https://viteplus-staging.void.app/ |
Member
Author
|
@cursor review |
There was a problem hiding this comment.
✅ 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.
cpojer
approved these changes
Jun 1, 2026
This was referenced Jun 1, 2026
Merged
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
In a monorepo created via
vp create vite:monorepowith pnpm, runningvp why vitereported the override as ineffective: it resolvedviteto upstreamvite(a transitive dependency of@voidzero-dev/vite-plus-core) rather than to@voidzero-dev/vite-plus-coreitself.Root cause
PR #1697 added
dropAliasedRuntimeDevDeps, which stripsvite/vitestfromapps/website/package.jsonfor every package manager. For pnpm this removed the only directvitedependency in a fresh workspace, so thepnpm-workspace.yamloverrides.vite: catalog:entry had no consumer to redirect. The onlyviteleft in the tree was vite-plus-core's own internalvite, sovp why viteshowed upstream vite and the override looked ineffective. The single-package app keepsvite: 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/viteresolves to@voidzero-dev/vite-plus-core, and<pm> why @voidzero-dev/vite-plus-coreshows it redirecting even vite-plus-test's peervite. Their rootoverrides/resolutionsredirect the transitive/peerviteregardless of a direct dependency. Theirvp why vitedisplay gap is a pre-existing limitation ofnpm explain/yarn why/bun why(they query by resolved package name, not thevitealias key), identical with or without the monorepo strip, so it is out of scope here.Fix
dropAliasedRuntimeDevDepsnow returns early for pnpm, keeping the aliasedvite/vitestso the workspace override has a direct consumer. npm/yarn/bun keep stripping the dead-weight keys.Before / after (
vp why vitein a fresh pnpm monorepo)Before:
After:
Verification
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).vp create vite:monorepo+vp why vitenow resolves to@voidzero-dev/vite-plus-core.new-vite-monoreporegenerated (website now keepsvite: catalog:);new-vite-monorepo-bununchanged.test-vp-create.ymlassertion made pnpm-aware: pnpm must keepvite; npm/yarn/bun must dropvite/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/vitestfromapps/website/package.json. The logic moves into exporteddropAliasedRuntimeDevDeps, which returns early for pnpm so workspaceoverridesstill have a directviteconsumer (fixing misleadingvp why viteaftervp create vite:monorepo). npm, yarn, and bun still remove those keys after migration.Migration guidance is updated in
docs/guide/migrate.md,vp migratehelp, and snap tests to say: on pnpm, keep migrator-aliasedvite/vitest; on other package managers, remove them after import rewrites.CI (
test-vp-create.yml) now asserts pnpm keepsviteon the website app while other PMs must not. Newmonorepo.spec.tscovers pnpm vs npm/yarn/bun behavior;new-vite-monoreposnap expectsvite: catalog:on the website.Reviewed by Cursor Bugbot for commit 16f7d45. Configure here.