Hoisted monorepo: identical deps become separate realpaths per workspace package #1242
SummaryIn a small workspace monorepo, under Under aube isolated, importers share one physical instance via the virtual Minimal public repro (aube cd hoisted-workspace-shared-dep-realpath
./repro.shWe hit this while using hoisted installs so Metro / Expo could see in-tree Observed on the repro (aube 1.37.0)Two workspace packages (
On the hoisted install we also saw matching inodes for some files inside those
Why it came up for usOn a larger Expo monorepo, hoisted install produced many physical copies of the No need to dig into that app here; the tiny Ideas that might help (not requests)If this is something you would ever want to support, things that would have
If hoisted is intentionally npm-like separate package roots per workspace Questions
No expectation of a feature from this; a short "won't do / use isolated" would |
Replies: 2 comments
|
Thanks for the detailed repro. I confirmed this is a pnpm-compatibility bug rather than an intentional limitation and opened #1243 with a fix. The root cause was that aube planned a separate hoisted tree for every workspace importer. That made cross-importer sharing impossible and also made the default The fix plans one workspace-wide tree. With the default One nuance for the repro: after this change, I verified the supplied fixture with the patched binary: both importer-based resolutions return the same realpath. AI-assisted — Tool: Codex; model: openai/gpt-5; version: unavailable. |
|
Retested the minimal repro with aube 1.38.1. |
Thanks for the detailed repro. I confirmed this is a pnpm-compatibility bug rather than an intentional limitation and opened #1243 with a fix.
The root cause was that aube planned a separate hoisted tree for every workspace importer. That made cross-importer sharing impossible and also made the default
hoistingLimits=nonebehave likeworkspaces.The fix plans one workspace-wide tree. With the default
none, compatible dependencies now hoist to one physical package at the workspace root;workspacesstill keeps a separate package root under each importer, and version or peer-context conflicts remain nested where needed.One nuance for the repro: after this change,
packages/app/node_modules/i…