voidzero-dev / voidzero-dev/vite-plus
Support pnpm catalog
- Dominant language
- Rust
- Stars
- 5.8k
- Forks
- 262
- Avg merge
- 23h 18m
- Merged PRs (30d)
- 139
Description
### Description
In current Vite+, when running `vp add vue` with [pnpm catalogs](https://pnpm.io/catalogs) configured in `pnpm-workspace.yaml`, it totally ignores the catalog and add the package with it version directly in `package.json`.
Since pnpm catalogs feature provide a lot of benefit for packages management (Anthony Fu wrote a [blog](https://antfu.me/posts/categorize-deps) about it), it will be great if VIte+ does support it.
### Suggested solution
- This feature can be toggle by a config in `vite.config.ts`: `pnpm.catalog: boolean` or an env var like `VP_CATALOG=boolean`.
- When running `vp add` and Vite+ detects a workspace that use pnpm catalog: instead of adding packages with pinned versions, it writes `catalog:` references into `package.json` and updates the workspace catalog:
```bash
# Given pnpm-workspace.yaml with:
# catalogs:
# prod:
# react: ^18.3.0
vp add react
# → detects react in "prod" catalog
# → writes "react": "catalog:prod" to package.json
# → runs vp install
vp add lodash
# → lodash not in any catalog
# → prompts to select a catalog (or skip)
# → fetches latest version, updates pnpm-workspace.yaml
# → writes "lodash": "catalog:prod" to package.json
# → runs vp install
```
### Alternative
_No response_
### Additional context
This feature is inspired by [`ni`](https://github.com/antfu-collective/ni)
### Validations
- [x] Read the [Contributing Guidelines](https://github.com/voidzero-dev/vite-plus/blob/main/CONTRIBUTING.md).
- [x] Confirm this request is for Vite+ itself and not for Vite, Vitest, tsdown, Rolldown, or Oxc.
- [x] Check that there isn't already an issue requesting the same feature.
Contributor guide
Research direction
Start by locating the `vp add` command and its handling of `package.json` and `pnpm-workspace.yaml`. Trace how catalog entries are detected, selected, and updated, then verify the requested `catalog:` references and install behavior for both existing and new dependencies.
Written by the indexing model from the issue text.
Assessment
- Domain
- cli, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100