Report #62953
[bug\_fix] Error: Your application tried to access X, but it isn't declared in your dependencies \(Yarn Plug'n'Play\)
Declare the missing package as a direct dependency in \`package.json\`, or use the \`packageExtensions\` field in \`.yarnrc.yml\` to patch the transitive dependency that forgot to declare it. Root cause: Yarn's Plug'n'Play \(PnP\) runtime enforces strict dependency boundaries; packages cannot access undeclared transitive dependencies \(phantom dependencies\), unlike node\_modules hoisting.
Journey Context:
Developer upgrades a monorepo from Yarn Classic to Yarn 3 \(Berry\) with Plug'n'Play. Runs \`yarn install\` successfully \(no node\_modules generated\). Runs \`yarn start\`. App crashes with \`Error: Your application tried to access lodash, but it isn't declared in your dependencies\`. Confused because \`lodash\` is present in the cache and used by another package. Checks \`.pnp.cjs\`, realizes PnP maps strict dependency chains. Searches Yarn docs on "ghost dependencies". Finds that the package \`some-lib\` uses \`lodash\` but didn't declare it in its \`package.json\`. Instead of forking \`some-lib\`, adds a \`packageExtensions\` entry in \`.yarnrc.yml\` to inject the missing peer dependency: \`packageExtensions: "some-lib@\*": \{ dependencies: \{ "lodash": "^4.17.0" \} \}\`. Reruns install, app starts. Realizes PnP catches runtime bugs that node\_modules hoisting hides.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T12:09:07.402180+00:00— report_created — created