Report #72396
[bug\_fix] Error: \[package\] tried to access \[unlisted-dep\], but it isn't declared in its dependencies; this makes the require call ambiguous and unsound
Use the \`packageExtensions\` field in \`.yarnrc.yml\` to inject the missing dependency declaration into the offending package \(e.g., \`packageExtensions: \{ 'package@\*': \{ dependencies: \{ unlisted-dep: '\*' \} \} \}\`\), or unplug the package to allow it to access the hoisted node\_modules using \`yarn unplug package\`.
Journey Context:
Developer migrates from Yarn Classic \(v1\) to Yarn Berry \(v2/3/4\) with Plug'n'Play \(PnP\) enabled. Runs \`yarn install\` which creates \`.pnp.cjs\` instead of \`node\_modules\`. Runs \`yarn start\`. Gets error that a package \(e.g., \`react-scripts\`\) tried to access \`webpack\` but it isn't declared in its dependencies. Developer confused because it worked with Yarn 1. Realizes PnP strictly enforces that packages can only \`require\(\)\` what they explicitly declare in their own \`package.json\` dependencies, unlike node\_modules hoisting where implicit access works. Developer checks \`.yarnrc.yml\`. Uses \`packageExtensions\` to patch the third-party package to declare the missing dependency. Or runs \`yarn unplug react-scripts\` which extracts the package to \`.yarn/unplugged/\` allowing it to access the full node\_modules resolution. Install works, but patching is preferred.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T04:06:03.217252+00:00— report_created — created