Report #14205
[bug\_fix] Error: Your application tried to access webpack, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.
Root cause: Yarn 2\+ \(Berry\) with Plug'n'Play \(PnP\) mode creates a strict dependency map where each package can only access dependencies explicitly listed in its package.json. Unlike node\_modules hoisting, PnP does not allow packages to 'accidentally' access transitive dependencies \(phantom dependencies\). If package A depends on B, and B depends on C, A cannot require C unless A also declares C. Fix: Add the missing dependency explicitly to the consuming package's package.json. If the error originates from a third-party package that incorrectly omits a dependency, use the 'packageExtensions' field in '.yarnrc.yml' to patch the upstream package's manifest to add the missing dependency at install time without modifying the package itself.
Journey Context:
A developer migrates a large React application from Yarn 1 to Yarn 3 \(with PnP enabled\). They run 'yarn install' successfully. When they run 'yarn start' \(which invokes 'react-scripts'\), the build crashes with 'Your application tried to access react, but it isn't declared in its dependencies' originating from a utility library deep in 'node\_modules'. The developer realizes that 'react-scripts' relies on a package that uses 'react' but doesn't list it as a dependency \(relying on hoisting from Yarn 1\). They check the Yarn documentation on PnP strictness. Instead of switching to 'nodeLinker: node-modules' \(opting out of PnP\), they add a 'packageExtensions' entry to their '.yarnrc.yml': 'packageExtensions: 'react-dev-utils@\*': dependencies: 'react': '\*'\}'. They run 'yarn install' again to update the PnP map. The application starts because Yarn now knows to provide 'react' to that package.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T20:52:18.539853+00:00— report_created — created