Skip to content

Avoid circular binding resolution between vite-plus-core and vite-plus #2054

Description

@jong-kyung

Context

While investigating a pnpm enable-global-virtual-store issue, @voidzero-dev/vite-plus-core failed to resolve vite-plus/binding when executed from pnpm's global virtual store realpath.

Current release rewrite:

@rolldown/binding-* -> vite-plus/binding

This creates an awkward package relationship:

vite-plus -> @voidzero-dev/vite-plus-core -> vite-plus/binding

A proposed optional peer dependency workaround(#2053) makes the dependency explicit, but it still feels circular because vite-plus already depends on @voidzero-dev/vite-plus-core .

Reproduction

A minimal reproduction is available here:

https://github.com/jong-kyung/repro-vite-plus-2054

It was created with vp create vite:application and enables pnpm's global virtual store. Running the repro imports vite/rolldown, which resolves @voidzero-dev/vite-plus-core from pnpm's global store realpath and fails to resolve vite-plus/binding.

vp install
vpr repro 
# or
pnpm run repro

Expected failure:

Cannot find module 'vite-plus/binding'

Proposal

Consider moving the binding resolver into a neutral package, for example:

@voidzero-dev/vite-plus-binding

Then both packages can depend on it:

vite-plus -> @voidzero-dev/vite-plus-binding
@voidzero-dev/vite-plus-core -> @voidzero-dev/vite-plus-binding

and the release rewrite can become:

@rolldown/binding-* -> @voidzero-dev/vite-plus-binding

vite-plus/binding could remain as a compatibility re-export.

Benefit

This avoids the circular vite-plus -> core -> vite-plus/binding shape while making native binding resolution explicit for pnpm global virtual store layouts.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

Fields

Priority

None yet

Effort

None yet

Target date

None yet

Start date

None yet

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions