fix(plugin-pnpm): uses actual scope and name for hardlink package location #6534
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What's the problem this PR addresses?
The current implementation of the
pnpm
linker stores package hardlinks within a nested structure consisting of a hashed directory plus an arbitrarypackage
directory. e.g..store/lodash-npm-4.17.21-6382451519/package
. The appendedpackage
path is a literal string in thePnpmLinker
and (I assume) originated from the standardyarn|npm pack
output filename.Rarely, package internals might introspect the filesystem to apply some logic / constraints. Notably, Next.js has a specific check to guarantee modules are loaded relative to a
next/
directory. This check fails because the hardlink exists inside of thepackage
directory.Conversely, when using
pnpm
directly, this check is successful because it places these hardlinks into a nested structure that includes the dependency name, e.g.:.pnpm/next@14.2.14_react-dom@18.3.1_react@18.3.1/node_modules/next
Resolves #6269
How did you fix it?
This PR updates the
getPackagePaths
method to leverage the existingstructUtils.stringifyIdent
method to generate the nested hardlink directory instead of using the literalpackage
string. This more closely aligns with the naming conventions ofpnpm
(and is also how thepnpm
linker plugin behaves in Yarn v3).Checklist