Conversation
33 tasks
Member
Author
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
How to use the Graphite Merge QueueAdd the label auto-merge to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
45e4691 to
bc38b7a
Compare
810d51c to
efc5c42
Compare
efc5c42 to
d143fc6
Compare
d143fc6 to
9db93c2
Compare
183be48 to
f551a2a
Compare
9db93c2 to
cc73dcc
Compare
000f043 to
00ae674
Compare
a38d005 to
c16f4d5
Compare
00ae674 to
5fb8073
Compare
ffb13dd to
3659cb9
Compare
cfccc29 to
d64cba8
Compare
f5c94ee to
2430298
Compare
df57cf4 to
5534094
Compare
d2cab2f to
c337bc4
Compare
04e854f to
641a5bc
Compare
8924f90 to
b56f905
Compare
1b89385 to
86fda74
Compare
## Summary - Replace Windows `.cmd` shim wrappers with lightweight trampoline `.exe` binaries - Eliminates the "Terminate batch job (Y/N)?" prompt on Ctrl+C - The trampoline detects its tool name from its own filename, sets `VITE_PLUS_SHIM_TOOL` env var, spawns `vp.exe`, ignores Ctrl+C (child handles it), and propagates the exit code - Thanks for the solution suggestion from @sunfkny ## Changes - Add `crates/vite_trampoline/` — minimal Windows trampoline binary (~100-150KB) - Update shim detection (`detect_shim_tool`) to check `VITE_PLUS_SHIM_TOOL` env var before `argv[0]` - Replace `.cmd`/`.sh` wrapper creation with trampoline `.exe` copying in `setup.rs` and `global_install.rs` - Add rename-before-copy pattern for refreshing `bin/vp.exe` while it's running - Add legacy `.cmd`/`.sh` cleanup during `vp env setup --refresh` - Update CI to build and distribute `vp-shim.exe` for Windows targets - Update `install.ps1`, `install.sh`, `publish-native-addons.ts` for trampoline distribution - Update `extract_platform_package` in upgrade path to also extract `vp-shim.exe` - Update npm-link conflict detection to recognize `.exe` shims - Add RFC document and update existing RFCs (`env-command`, `upgrade-command`, `vpx-command`) ## Manual testing (Windows) ### 1\. Fresh install via PowerShell ```powershell Remove-Item -Recurse -Force "$env:USERPROFILE\.vite-plus" -ErrorAction SilentlyContinue & ./packages/cli/install.ps1 dir "$env:USERPROFILE\.vite-plus\bin\*.exe" dir "$env:USERPROFILE\.vite-plus\bin\*.cmd" ``` - [x] Trampoline `.exe` shims created for vp, node, npm, npx, vpx - [x] No legacy `.cmd` wrappers for core tools (only `vp-use.cmd` if present) - [x] `node --version` works - [x] `npm --version` works - [x] `vp --version` works ### 2\. Fresh install via Git Bash ([install.sh](http://install.sh)) ```bash rm -rf ~/.vite-plus bash ./packages/cli/install.sh ls -la ~/.vite-plus/current/bin/vp-shim.exe ``` - [x] `vp-shim.exe` copied alongside `vp.exe` in `current/bin/` - [x] `node --version` works - [x] `npm --version` works ### 3\. Ctrl+C behavior (the main fix) ```powershell vp dev # Press Ctrl+C in each shell ``` - [x] cmd.exe: clean exit, NO "Terminate batch job (Y/N)?" prompt - [x] PowerShell: clean exit - [x] Git Bash: clean exit ### 4\. Exit code propagation ```powershell node -e "process.exit(42)"; echo $LASTEXITCODE npm run nonexistent-script; echo $LASTEXITCODE ``` - [x] Exit code 42 propagated correctly - [x] Non-zero exit code from failed npm command ### 5\. Nested shim invocations (recursion marker) ```powershell npm --version pnpm --version ``` - [x] `npm --version` prints version (npm spawns node internally) - [x] `pnpm --version` prints version (pnpm spawns node internally) ### 6\. `vp env setup --refresh` (running exe overwrite) ```powershell vp env setup --refresh node --version dir "$env:USERPROFILE\.vite-plus\bin\*.old" ``` - [x] Refresh succeeds without "sharing violation" error - [x] Shims still work after refresh - [x] `.old` files cleaned up (or only one recent if vp.exe was still running) ### 7\. `vp install -g` / `vp remove -g` (managed package shims) ```powershell vp install -g typescript where.exe tsc tsc --version vp remove -g typescript dir "$env:USERPROFILE\.vite-plus\bin\tsc*" ``` - [x] `tsc.exe` created (NOT `tsc.cmd`) - [x] `tsc --version` works - [x] After remove: no `tsc.exe`, `tsc.cmd`, or extensionless `tsc` left behind ### 8\. `npm install -g` auto-link (npm-managed packages) ```powershell npm install -g cowsay where.exe cowsay cowsay hello npm uninstall -g cowsay ``` - [x] npm packages use `.cmd` wrapper (NOT trampoline) - [x] `cowsay` works - [x] Uninstall removes the `.cmd` wrapper ### 9\. `vp upgrade` and rollback ```powershell vp --version vp upgrade <version> node --version vp upgrade --rollback vp --version ``` - [x] Upgrade succeeds, shims still work - [x] Rollback succeeds, shims still work ### 10\. Install a pre-trampoline version (downgrade compatibility) ```powershell $env:VITE_PLUS_VERSION = "<pre-trampoline-version>" & ./packages/cli/install.ps1 Remove-Item Env:VITE_PLUS_VERSION dir "$env:USERPROFILE\.vite-plus\bin\*.exe" dir "$env:USERPROFILE\.vite-plus\bin\*.cmd" ``` - [x] Falls back to `.cmd` wrappers - [x] Stale trampoline `.exe` shims removed (`node.exe`, `npm.exe`, etc.) - [x] `vp --version` works via `.cmd` wrapper ### 11\. `vp env doctor` ```powershell vp env doctor ``` - [x] Shows shims as working, no errors about missing files ### 12\. Cross-shell verification - [x] cmd.exe: `node --version`, `npm --version`, `vp --version` all work - [x] PowerShell: `node --version`, `npm --version`, `vp --version` all work - [x] Git Bash: `node --version`, `npm --version`, `vp --version` all work Closes #835
86fda74 to
ae93e93
Compare
b56f905 to
3aadffe
Compare
Add bun as the 4th supported package manager alongside pnpm, npm, and yarn.
Bun is added only as a package manager — runtime support is not planned.
Rust core:
- Add `Bun` variant to `PackageManagerType` enum
- Detect bun via `packageManager` field, `bun.lock`, `bun.lockb`, `bunfig.toml`
- Download platform-specific native binary from `@oven/bun-{os}-{arch}` npm packages
- Add native binary shim support (non-Node.js wrappers for sh/cmd/ps1)
- Add `PackageManagerType::Bun` arms to all 30 command files
- Add bun to interactive package manager selection menu
Global CLI & NAPI:
- Add `"bun"` to `PACKAGE_MANAGER_TOOLS` in shim dispatch
- Add `"bun" => PackageManagerType::Bun` in NAPI binding
TypeScript:
- Add `bun` to `PackageManager` type and selection prompt
- Add `bunx` as DLX command runner
- Handle bun in monorepo templates and migration (overrides, no catalog)
RFCs:
- Update all 11 package-manager RFCs with bun command mappings
3aadffe to
bc1b785
Compare
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.

Add bun as the 4th supported package manager alongside pnpm, npm, and yarn.
Bun is added only as a package manager — runtime support is not planned.
Rust core:
Bunvariant toPackageManagerTypeenumpackageManagerfield,bun.lock,bun.lockb,bunfig.toml@oven/bun-{os}-{arch}npm packagesPackageManagerType::Bunarms to all 30 command filesGlobal CLI & NAPI:
"bun"toPACKAGE_MANAGER_TOOLSin shim dispatch"bun" => PackageManagerType::Bunin NAPI bindingTypeScript:
buntoPackageManagertype and selection promptbunxas DLX command runnerRFCs: