[node-modules] Fixes soft and hard link merging after hoisting #2382
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?
In Berry we have two link kinds for dependencies:
portal:
andlink:
dependencies.After hoisting two dependencies might end up having the same name but different link types. For example, the root workspace can have inner workspace with the name 'foo' and depend on the package with the name
foo
from the registry, both of them are dependencies of the root workspace, but they have different link types. NM linker had not always handled this situation correctly and often tried to merge soft and hard links, when hard link just need to take precedence and just overwrite the soft link.The problem were initially spotted by Babel team here:
babel/babel#12583 (comment)
CC: @nicolo-ribaudo @merceyz
How did you fix it?
Now NM linker do not try to merge soft and hard links together, the hard link just overwrites the soft link in the resulting nm tree, this does not affect the traversal, the nm will still traverse children of both dependency link kinds.
Checklist