Skip to content

fix(migrate): complete vp migrate for existing Vite+ projects - #1821

Merged
fengmk2 merged 32 commits into
voidzero-dev:mainfrom
jong-kyung:fix/migrate-partial-vite-plus
Jun 14, 2026
Merged

fengmk2 merged 32 commits into
voidzero-dev:mainfrom
jong-kyung:fix/migrate-partial-vite-plus

Conversation

@jong-kyung

@jong-kyung jong-kyung commented Jun 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Treat vite-plus in package.json as an installation signal, not a migration-complete signal.
  • Complete pending migration work for existing Vite+ projects, including scripts, imports, tsconfig types,
    ESLint/Prettier migration, and active legacy hook migration.
  • Add idempotent package manager settings completion for existing Vite+ projects without applying optional
    hooks/agent/editor setup unless explicitly requested.
  • Keep fully migrated projects idempotent with the existing “Happy coding!” no-op behavior.

Validation

  • pnpm -F vite-plus snap-test-global migration-already-vite-plus
  • pnpm -F vite-plus snap-test-global migration-partially-installed-vite-plus
  • pnpm -F vite-plus snap-test-global migration-eslint-lint-staged-mjs
  • vp check --fix packages/cli/src/migration/bin.ts packages/cli/src/migration/migrator.ts packages/cli/src/migration/report.ts packages/cli/src/migration/__tests__/migrator.spec.ts
  • vp test run packages/cli/src/migration/__tests__/migrator.spec.ts

closes #1817

Finish core script, import, and tsconfig type rewrites when vite-plus is already installed but legacy Vite signals remain.

Add regression coverage matching the manual migration reproduction with package manager overrides.
@netlify

netlify Bot commented Jun 12, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for viteplus-preview canceled.

Name Link
🔨 Latest commit 5db5d87
🔍 Latest deploy log https://app.netlify.com/projects/viteplus-preview/deploys/6a2ea9839b66f500088adbe1

@jong-kyung jong-kyung self-assigned this Jun 12, 2026
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@socket-security

socket-security Bot commented Jun 12, 2026 •

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​types/​react-dom@​19.2.31001007585100
Addednpm/​@​types/​react@​19.2.171001007995100
Addednpm/​@​types/​node@​24.13.21001008196100
Addednpm/​react@​19.2.71001008497100
Addednpm/​@​vitejs/​plugin-react@​6.0.210010010092100
Addednpm/​react-dom@​19.2.71001009298100

View full report

@jong-kyung
jong-kyung marked this pull request as ready for review June 12, 2026 04:59
@jong-kyung
jong-kyung force-pushed the fix/migrate-partial-vite-plus branch from 1d85af2 to 822a576 Compare June 12, 2026 05:03
@jong-kyung
jong-kyung marked this pull request as draft June 12, 2026 05:49
@jong-kyung
jong-kyung force-pushed the fix/migrate-partial-vite-plus branch from 962e6bc to e42e2fb Compare June 12, 2026 07:10
@jong-kyung jong-kyung changed the title fix(migrate): detect partial Vite+ migrations fix(migrate): complete vp migrate for existing Vite+ projects Jun 12, 2026
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@jong-kyung
jong-kyung marked this pull request as ready for review June 12, 2026 08:56
@jong-kyung
jong-kyung requested a review from fengmk2 June 12, 2026 08:58
@fengmk2

fengmk2 commented Jun 12, 2026

Copy link
Copy Markdown
Member

@codex review

@fengmk2 fengmk2 added test: e2e Auto run e2e tests test: create-e2e Run `vp create` e2e tests labels Jun 12, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 62aaf17b34

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cli/src/migration/migrator.ts Outdated
Comment thread packages/cli/src/migration/migrator.ts
Comment thread packages/cli/src/migration/migrator.ts Outdated
Complete existing Vite+ package manager bootstrap checks so partial migrations do not leave unresolved pnpm catalogs, npm override conflicts, or missing pnpm peer rules.
Keep existing Vite+ bootstrap catalog usage limited to paths that also define catalog entries, and cover pnpm/yarn monorepo edge cases.
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@fengmk2 Could you please review again? 🙏
I addressed the Codex feedback and ran another round of manual testing.

@fengmk2

fengmk2 commented Jun 14, 2026

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0f483c138d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cli/src/migration/migrator.ts
Comment thread packages/cli/src/migration/bin.ts
Comment thread packages/cli/src/migration/migrator.ts Outdated
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@fengmk2 Could you please review this again when you have a chance? Sorry for the extra back-and-forth.
Also, could you let me know if there’s any way for me to trigger Codex reviews like before?

@fengmk2

fengmk2 commented Jun 14, 2026

Copy link
Copy Markdown
Member

@jong-kyung You can try to apply for Codex open source project sponsorship through this form: https://openai.com/form/codex-for-oss/. I understand that Codex review is triggered under individual accounts, so each person's trigger will be different.

@fengmk2

fengmk2 commented Jun 14, 2026

Copy link
Copy Markdown
Member

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5db5d87486

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cli/src/migration/migrator.ts
Comment thread packages/cli/src/migration/bin.ts
Comment thread packages/cli/src/migration/migrator.ts
@jong-kyung

Copy link
Copy Markdown
Collaborator Author

@fengmk2 Could you please take another look at the current changes when you have a chance?
I reviewed the additional Codex feedback, but the remaining items seem to be fairly edge-case-specific and would broaden the scope of this PR.

@fengmk2
fengmk2 merged commit 79a2ef5 into voidzero-dev:main Jun 14, 2026
93 checks passed
@jong-kyung
jong-kyung deleted the fix/migrate-partial-vite-plus branch June 14, 2026 14:45
@jong-kyung

jong-kyung commented Jun 14, 2026 •

Copy link
Copy Markdown
Collaborator Author

@fengmk2 I’m always grateful for your kindness. 🙇‍♂️

@fengmk2

fengmk2 commented Jun 14, 2026

Copy link
Copy Markdown
Member

@jong-kyung you are welcome 👍

Brooooooklyn added a commit that referenced this pull request Jun 15, 2026
…dated install

Rebasing onto main's #1821 (deferred `needsInstall` flag + a single
consolidated install block) replaced this branch's inline ESLint/Prettier
early-return install — which passed `--no-frozen-lockfile` (pnpm/yarn) or
`--force` (npm/bun) per commit 1321e34 — with main's
`forceInstall ? ['--force'] : undefined`. `forceInstall` is only true for
npm/bun bootstrap changes, so a pnpm/yarn migration that only rewrites
package.json got no args and would fail a frozen-lockfile reinstall under CI
(ERR_PNPM_LOCKFILE_CONFIG_MISMATCH).

Compute the install args from the package manager in the consolidated block,
mirroring executeMigrationPlan, so every install reached after a
package.json-modifying migration step re-resolves the now-stale lockfile.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brooooooklyn added a commit that referenced this pull request Jun 15, 2026
…t lockfile

Two rebase regressions that turned PR CI red on this branch's HEAD:

* migrator.ts: `ensureVitePlusBootstrap` called `rewritePnpmWorkspaceYaml`
  with a single argument. main's PR #1821 added this call site with the
  pre-widening 1-arg signature; this branch had already grown the function
  to 3-4 params (pnpm major + build-allowance), so the rebased call no
  longer type-checked (TS2554), failing `pnpm tsgo` / `vp check` and thus
  the CLI E2E jobs on linux/mac/windows. Pass an undefined pnpm major so
  build-script allowance stays skipped on this bootstrap path, matching the
  behavior it had before the signature grew.

* pnpm-lock.yaml: the lockfile was regenerated for the vitest 4.1.9 pin but
  never deduped, leaving the vendored `vite` importer's `vitest` at 4.1.8.
  `pnpm dedupe --check` (Lint job) flagged the skew. Ran `pnpm dedupe`;
  only the vitest family + coverage transitive deps move.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Brooooooklyn added a commit that referenced this pull request Jun 15, 2026
The rebase pulled main's PR #1821 `needsInstall` consolidation into the
early-return path (`main`, hasVitePlusDependency branch). main's version
handled a failed install with an inline `cancelAndExit` (hard abort) and
credited `installSummary.durationMs` unconditionally — dropping this
branch's `handleInstallResult` wiring there. The full migration path kept
the helper, so only the early-return path regressed, which the
install-failure-guard.spec guard test caught (it was masked behind the
TS2554 compile error until that was fixed).

Route the early-return install back through `handleInstallResult`: a failed
install now warns, appends to report.warnings, and flips process.exitCode
(matching the full path) instead of being credited as a successful
migration. The success path is unchanged — the helper returns durationMs.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@fengmk2 fengmk2 mentioned this pull request Jun 17, 2026
fengmk2 added a commit that referenced this pull request Jun 17, 2026
Release vite-plus v0.2.0.

Vite+ now consumes upstream Vitest directly (no wrapper), raises the
minimum supported Node.js version to 22.18.0, and ships corepack and
devEngines support.

### Highlights

- **`vp test` now runs upstream Vitest directly (breaking)**: Vite+ used
to ship `@voidzero-dev/vite-plus-test`, a rebundled copy of Vitest that
lagged upstream releases. That package is removed; `vp test` now runs
the real upstream `vitest`, which is installed automatically as a
dependency of `vite-plus` (you no longer add `vitest` or `@vitest/*`
yourself, and `vite` still resolves to `@voidzero-dev/vite-plus-core`
via package-manager overrides). Your `import ... from 'vite-plus/test'`
code keeps working unchanged and `vp migrate` updates existing projects
([#1588](#1588)), by
@Brooooooklyn
- **Minimum supported Node.js version raised to `^22.18.0 || >=24.11.0`
(breaking)**: Node 20 reached end-of-life and the bundled tsdown already
required `^22.18.0`, so the published engines range now matches what `vp
pack` can actually deliver; `vp exec` / `vp run` / `vp dlx` reject
projects resolving an older Node with the existing incompatibility error
([#1813](#1813)), by
@fengmk2
- **Corepack now works under Vite+**: `corepack` is a default `vp env
setup` shim, resolved managed-global, then Node-bundled (Node <= 24),
then auto-installed (Node 25+, which dropped corepack); `corepack
enable` / `disable` land their pnpm/yarn launchers on PATH and
Vite+-owned shims are restored if corepack replaces them
([#1808](#1808)), by
@fengmk2
- **devEngines support for runtime and package-manager selection**:
Vite+ reads `devEngines.runtime` (ranked above `engines.node`) and
`devEngines.packageManager`; auto-pin and `vp migrate` write
`devEngines.packageManager`, `vp env pin` / `unpin` target
`devEngines.runtime`, and `vp env doctor` reports conflicts instead of
silently resolving them
([#1760](#1760)), by
@fengmk2

### Features

- `vp pm approve-builds`: forward to npm's new `approve-scripts` /
`deny-scripts` (npm >= 11.16.0) instead of the previous no-op, matching
`pnpm approve-builds` / `bun pm trust`; mixed approve+deny is rejected
with actionable guidance and npm's advisory-only caveat is surfaced
([#1733](#1733)), by
@fengmk2
- `vp create`: support local monorepo templates declared in
`create.templates` in `vite.config.ts`; `vp create vite:generator`
scaffolds a Bingo generator and auto-registers it in the picker,
replacing the old package.json-keyword inference
([#1777](#1777)), by
@fengmk2
- `vp create`: detect direct dependencies whose build scripts the
package manager gated (e.g. native builds like `better-sqlite3`) and act
on them; prompt to approve each (default off) interactively, point at
`vp pm approve-builds` non-interactively, or build them with
`--approve-builds`
([#1828](#1828)), by
@fengmk2
- `vp config`: add `--no-hooks` and `--no-agent` opt-outs to skip
git-hook installation and coding-agent instruction updates
([#1842](#1842)), by
@leno23
- `vp list -g`: sort the global package list output so entries appear in
a stable order
([#1748](#1748)), by
@liangmiQwQ
- Upgrade upstream dependencies: rolldown `1.0.3 -> 1.1.1`, tsdown
`0.22.1 -> 0.22.3`, oxlint `1.67.0 -> 1.70.0`, oxfmt `0.52.0 -> 0.55.0`,
vitest `4.1.8 -> 4.1.9`, and the oxc toolchain `0.133.0 -> 0.136.0`
([#1749](#1749),
[#1767](#1767),
[#1812](#1812),
[#1834](#1834),
[#1855](#1855)), by
@voidzero-guard[bot]

### Fixes & Enhancements

- Security: resolve open Rust Dependabot advisories by bumping
transitive `openssl` `0.10.76 -> 0.10.80` (`openssl-sys` `0.9.112 ->
0.9.116`), fixing five high-severity rust-openssl issues (buffer
overflows in key derivation, AES key wrap, and digest finalization; an
unchecked PSK/cookie trampoline length leaking adjacent memory; and
OCSP-responder undefined behavior:
[GHSA-pqf5-4pqq-29f5](GHSA-pqf5-4pqq-29f5),
[GHSA-8c75-8mhr-p7r9](GHSA-8c75-8mhr-p7r9),
[GHSA-ghm9-cr32-g9qj](GHSA-ghm9-cr32-g9qj),
[GHSA-hppc-g8h3-xhp3](GHSA-hppc-g8h3-xhp3),
[GHSA-xp3w-r5p5-63rr](GHSA-xp3w-r5p5-63rr)),
and drop the unmaintained, unsound `libyml`
([GHSA-gfxp-f68g-8x78](GHSA-gfxp-f68g-8x78),
high) by removing dead `serde_yml` code
([#1742](#1742)), by
@fengmk2
- Security (docs site): update `mermaid` `11.13.0 -> 11.15.0` to fix
improper `classDef` sanitization in state diagrams that allowed HTML
injection
([CVE-2026-41149](https://nvd.nist.gov/vuln/detail/CVE-2026-41149) /
[GHSA-ghcm-xqfw-q4vr](GHSA-ghcm-xqfw-q4vr),
medium severity; `<script>` tags are stripped so it does not reach XSS)
([#1745](#1745)), by
@renovate[bot]
- `vp check --fix` / `vp staged`: create/migrate now wrap inline Vite
`plugins: [...]` arrays with `lazyPlugins(...)` so plugin factories
aren't eagerly executed (and don't hang on open handles) during
lint/format/check config loading
([#1752](#1752)), by
@jong-kyung
- `vp migrate`: complete pending migration work for projects that
already have `vite-plus` installed (scripts, imports, tsconfig types,
ESLint/Prettier, legacy hooks, package-manager settings) instead of
treating `vite-plus` as migration-complete; fully migrated projects stay
idempotent
([#1821](#1821)), by
@jong-kyung
- `vp create` / `vp migrate`: detect shorthand `fmt,` / `lint,` config
keys so a duplicate inline block is no longer injected
([#1843](#1843)), by
@fengmk2
- IDE oxlint/oxfmt wrappers: set `VP_COMMAND` so `lazyPlugins()` skips
framework plugins during LSP config reads, preventing a stray
`.svelte-kit` (and similar) directory at the monorepo root
([#1764](#1764)), by
@jong-kyung
- `vp lint` / `vp run -r lint` on Windows: keep the absolute `tsgolint`
path for workspace lint runs instead of downgrading it to a wrong
cwd-relative path
([#1758](#1758)), by
@semimikoh
- oxlint wrapper: set the `tsgolint` path so type-aware lint resolves it
([#1811](#1811)), by
@jong-kyung
- `vp install -g`: use a unique backup directory and treat stale-backup
cleanup as best-effort so a locked Windows binary no longer fails an
otherwise successful reinstall
([#1753](#1753)), by
@fengmk2
- `vp install -g`: remove stale managed binary shims when a reinstalled
package drops a bin from its `package.json#bin`
([#1765](#1765)), by
@liangmiQwQ
- `vp create --git`: surface git's actual stdout/stderr when the initial
commit fails instead of always blaming `user.name` / `user.email`
([#1819](#1819)), by
@fengmk2
- `vp create vite:generator`: reject `--git` / `--no-git`, since adding
a generator to an existing monorepo does not initialize git
([#1788](#1788)), by
@jong-kyung
- Global CLI: harden `find_system_tool` against a self-exec loop (skip
the running executable's own bin directory) and fix two
`vite_global_cli` tests that could hang
([#1820](#1820)), by
@fengmk2
- CLI help: unify alias display
([#1832](#1832)), show
supported `run` options
([#1797](#1797)), show
`--fail-if-no-match` in `exec` help
([#1798](#1798)), add the
`implode` documentation link
([#1796](#1796)), and
handle nested-command typo help
([#1803](#1803)), by
@jong-kyung

### Docs

- Document `vp create` opt-out options
([#1790](#1790)), by
@jong-kyung
- Document `vp upgrade` options
([#1847](#1847)), by
@jong-kyung
- Align the config overview with the sidebar
([#1846](#1846)), by
@jong-kyung
- Sync the documented command lists with the help output
([#1850](#1850)), by
@jong-kyung
- Clarify lazy plugin side effects
([#1841](#1841)), by
@leno23
- Add JongKyung's X profile
([#1844](#1844)) and
update Christoph's X profile
([#1845](#1845)) on the
team page, by @jong-kyung

### Refactor

- Remove the CLI tips system; the shortcuts it printed on `vp install`
are already covered by the help system and added unnecessary complexity
([#1799](#1799)), by
@cpojer

### Chore

- Re-enable Renovate dependency updates with a targeted ignore-list
([#1744](#1744)), by
@fengmk2
- Keep generated NAPI bindings during upgrade-deps
([#1759](#1759)), by
@fengmk2
- Remove the `vite_glob` dependency from vite-plus
([#1763](#1763)), by
@wan9chi
- Keep `sync-remote` from churning `pnpm-workspace.yaml` (dedupe
`minimumReleaseAgeExclude`, preserve comments)
([#1787](#1787)), by
@fengmk2
- Make unix `just test` runnable
([#1755](#1755)), by
@situ2001
- CI: reuse `just lint` and `just test` as the single source of truth
([#1809](#1809)), pin
`cargo-zigbuild` to a git rev to fix the aarch64-musl link failure
([#1815](#1815)), and keep
upgrade-deps green when rolldown bumps oxc
([#1833](#1833)), by
@fengmk2
- Update Rust to nightly-2026-06-10
([#1725](#1725)), typos to
v1.47.1 / v1.47.2
([#1772](#1772),
[#1775](#1775)), GitHub
Actions ([#1778](#1778),
[#1829](#1829)), and npm
packages ([#1779](#1779)),
by @renovate[bot]
- Bump `oxc-project/setup-node` to v1.3.1
([#1792](#1792)), by
@Boshen
- Refresh trusted stack stats on the docs homepage
([#1786](#1786),
[#1837](#1837)), by
@voidzero-guard[bot]

### Bundled Versions

| Tool | Version | Source |
| --- | --- | --- |
| vite | `8.0.16` |
[`f94df87`](vitejs/vite@f94df87)
|
| rolldown | `1.1.1` |
[`d7f919c`](rolldown/rolldown@d7f919c)
|
| tsdown | `0.22.3` | [npm](https://npmx.dev/package/tsdown/v/0.22.3) |
| vitest | `4.1.9` | [npm](https://npmx.dev/package/vitest/v/4.1.9) |
| oxlint | `1.70.0` | [npm](https://npmx.dev/package/oxlint/v/1.70.0) |
| oxlint-tsgolint | `0.23.0` |
[npm](https://npmx.dev/package/oxlint-tsgolint/v/0.23.0) |
| oxfmt | `0.55.0` | [npm](https://npmx.dev/package/oxfmt/v/0.55.0) |

### Upgrading from 0.1.24 to 0.2.0

This release has two breaking changes. For most projects the upgrade is
`vp upgrade`, bump the project's `vite-plus`, then `vp migrate`.

#### 1. Update the CLI

```bash
vp upgrade
```

#### 2. Node.js 20 is no longer supported

The minimum supported Node.js version is now `^22.18.0 || >=24.11.0`
(Node 20 reached end-of-life). If you are still on Node 20:

- Check your version: `node --version` (or `vp env doctor`)
- Move to a supported release: `vp env pin 22.18.0` (or a newer LTS), or
update your `.node-version` / `devEngines.runtime`

`vp exec` / `vp run` / `vp dlx` now refuse to run against a project that
resolves Node < 22.18.0.

#### 3. Vitest is now upstream (the wrapper is gone)

`@voidzero-dev/vite-plus-test` has been removed; Vite+ consumes upstream
`vitest` directly. Bump `vite-plus` first, then migrate:

```bash
vp update vite-plus --latest    # project's vite-plus -> 0.2.0 (ignores the old range, updates the lockfile); monorepo: add -r
vp migrate                      # local vite-plus is now 0.2.0, so the new migration runs
```

`vp update --latest` re-resolves `vite-plus` to the newest release
regardless of the old semver range, so the lockfile cannot pin you back
to 0.1.24. The project's local `vite-plus` is then 0.2.0, and since the
global `vp` delegates `migrate` to the project's local install, `vp
migrate` runs the new migration.

- Your `import { vi, ... } from 'vite-plus/test'` code is unchanged. `vp
migrate` rewrites any leftover `vitest` / `@vitest/*` imports and
normalizes stale `vitest: npm:@voidzero-dev/vite-plus-test@*` aliases.
- You no longer add `vitest` or `@vitest/*` yourself; they arrive
transitively through `vite-plus`.

### New Contributors

Welcome to our new contributor @situ2001! 🎉

**Full Changelog**:
v0.1.24...v0.2.0

---

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

preview-build Publish this PR's commits to the registry bridge as preview builds test: create-e2e Run `vp create` e2e tests test: e2e Auto run e2e tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

vp migrate exits early when vite-plus is already installed, leaving Vite imports and scripts unmigrated

2 participants