From a8420132b14a0b588a6f2cd17960718a2f963367 Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Fri, 8 Jul 2022 22:48:25 +0300 Subject: [PATCH] fix: don't symlink the autoinstalled peers to the root of node_modules close #4988 --- .changeset/early-bats-sell.md | 6 ++++++ packages/core/src/install/link.ts | 2 ++ packages/core/test/install/autoInstallPeers.ts | 1 + 3 files changed, 9 insertions(+) create mode 100644 .changeset/early-bats-sell.md diff --git a/.changeset/early-bats-sell.md b/.changeset/early-bats-sell.md new file mode 100644 index 00000000000..24d23031b6c --- /dev/null +++ b/.changeset/early-bats-sell.md @@ -0,0 +1,6 @@ +--- +"@pnpm/core": patch +"pnpm": patch +--- + +Don't symlink the autoinstalled peer dependencies to the root of `node_modules` [#4988](https://github.com/pnpm/pnpm/issues/4988). diff --git a/packages/core/src/install/link.ts b/packages/core/src/install/link.ts index 6af95883e45..58e7f716622 100644 --- a/packages/core/src/install/link.ts +++ b/packages/core/src/install/link.ts @@ -160,8 +160,10 @@ export default async function linkPackages ( if (opts.symlink) { await Promise.all(projects.map(async ({ id, manifest, modulesDir, rootDir }) => { const deps = opts.dependenciesByProjectId[id] + const importerFromLockfile = newCurrentLockfile.importers[id] await Promise.all([ ...Object.entries(deps) + .filter(([rootAlias]) => importerFromLockfile.specifiers[rootAlias]) .map(([rootAlias, depPath]) => ({ rootAlias, depGraphNode: depGraph[depPath] })) .filter(({ depGraphNode }) => depGraphNode) .map(async ({ rootAlias, depGraphNode }) => { diff --git a/packages/core/test/install/autoInstallPeers.ts b/packages/core/test/install/autoInstallPeers.ts index b7c4dab0ceb..67af36a6514 100644 --- a/packages/core/test/install/autoInstallPeers.ts +++ b/packages/core/test/install/autoInstallPeers.ts @@ -12,6 +12,7 @@ test('auto install non-optional peer dependencies', async () => { '/abc-optional-peers/1.0.0_peer-a@1.0.0', '/peer-a/1.0.0', ]) + await project.hasNot('peer-a') }) test('auto install the common peer dependency', async () => {