voidzero-dev / voidzero-dev/vite-plus

Allow vp create to scaffold into a non-empty directory

Offen
#2,521 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen
enhancement
Vorherrschende Sprache
Rust
Sterne
5.8k
Forks
262
Ø Merge
23 Std. 18 Min.
Gemergte PRs (30 T.)
139

Beschreibung

### Description

As a developer using Vite+ I want `vp create` to scaffold into a directory that already has content, so that I can add Vite+ to an existing project instead of only starting from an empty folder.

Today `vp create --directory .` refuses if the target holds anything other than `.git`:

```
Use --directory to specify a different location or remove the directory first
Target directory "…" is not empty
```

`.git` is already excluded — both as a directory in a normal clone and as a file in a git worktree — so support for existing repositories looks intended. But one unrelated entry blocks it, and an existing repository almost always has one.

I hit this adding a Vite+ frontend build to a Python project (a ComfyUI custom node pack). The repository root holds `README.md`, `LICENSE`, and `pyproject.toml`, all of which have to stay, so `vp create` cannot run there at all. My workaround was to scaffold into a scratch directory and copy the result across by hand, which loses the interactive prompts and is easy to get wrong.

Verified on v0.2.9, one scaffold per row:

| Target directory contains | `vp create vite:application --directory .` |
| --- | --- |
| `.git` directory (plain repo) | succeeds |
| `.git` file (git worktree) | succeeds |
| `.git` + `README.md` | refuses |
| `README.md` only | refuses |
| `.DS_Store` only | refuses |

### Suggested solution

A flag that permits a non-empty target:

```sh
vp create vite:application --directory . --force
```

Behaviour: write the template into the directory, leave existing files alone, and overwrite only where template and directory collide. In interactive mode, listing the files that would be overwritten and asking to confirm would make it safe to run against real work.

### Alternative

A lighter change that would cover most cases on its own: widen the set of entries the emptiness check ignores, alongside `.git`, to the files usually present in a fresh repository — `README.md`, `LICENSE`, `.gitignore`, `.gitattributes`, `.DS_Store`, `.vscode/`, `.idea/`.

Merging into an existing `package.json` rather than replacing it would be the ideal end state, but either of the above would unblock the case on its own.

### Additional context

Platform: macOS (darwin 25.5.0), Node 24.19.0, pnpm 11.22.0, `vp` v0.2.9.

Two smaller things noticed while narrowing this down, both in the same area. Happy to split either into its own issue.

First, when the directory name is not a valid npm package name, `vp create` generates a random unrelated name rather than sanitising or prompting. My directory is `ComfyUI-DenoiseHQNodes.feat-1-save-image-node`, which is invalid because of the uppercase letters. Three runs produced `appoint-track`, `perspective-detailed`, and `nation-virtually`. In non-interactive mode that name lands in `package.json` unnoticed. Lowercasing and replacing invalid characters would give a usable default here.

Second, when the emptiness check fails in **interactive** mode the reason is not shown — output ends at `Scaffolding failed (0s)`. Non-interactive mode does print `Target directory "…" is not empty`. This may share a code path with #2453.

### Validations

- [x] Read the Contributing Guidelines.
- [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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne beim Einstiegspunkt `vp create` und reproduziere `vp create vite:application --directory .` in Verzeichnissen, die `.git`, `README.md` und `.DS_Store` enthalten, einschließlich des interaktiven Modus. Definiere das unterstützte Verhalten für nicht leere Verzeichnisse, einschließlich Kollisionsbehandlung und Bestätigung, und überprüfe, dass vorhandene Dateien intakt bleiben und das Scaffolding weiterhin erfolgreich ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
node.js, rust
Bereich
cli, tooling
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Aktiv
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.