From 471ee655323fca7bf8caa4aef61190286bf7328f Mon Sep 17 00:00:00 2001 From: Zoltan Kochan Date: Tue, 21 May 2024 13:53:19 +0200 Subject: [PATCH] fix: reduce memory usage during peers resolution (#8106) ref #8072 --- .changeset/ninety-kids-push.md | 6 ++++++ pkg-manager/resolve-dependencies/src/resolvePeers.ts | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/ninety-kids-push.md diff --git a/.changeset/ninety-kids-push.md b/.changeset/ninety-kids-push.md new file mode 100644 index 0000000000..999c4c5ea4 --- /dev/null +++ b/.changeset/ninety-kids-push.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +"pnpm": patch +--- + +Reduce memory usage by peer dependencies resolution [#8072](https://github.com/pnpm/pnpm/issues/8072). diff --git a/pkg-manager/resolve-dependencies/src/resolvePeers.ts b/pkg-manager/resolve-dependencies/src/resolvePeers.ts index 79d3058d29..52ceeab47c 100644 --- a/pkg-manager/resolve-dependencies/src/resolvePeers.ts +++ b/pkg-manager/resolve-dependencies/src/resolvePeers.ts @@ -738,9 +738,10 @@ async function resolvePeersOfChildren ( const allMissingPeers = new Set() // Partition children based on whether they're repeated in parentPkgs. - // This impacts the efficiency of graph traversal and prevents potential out-of-memory errors.mes can even lead to out-of-memory exceptions. + // This impacts the efficiency of graph traversal and prevents potential out-of-memory errors. + // We check repeated first as the peers resolution of those probably are cached already. const [repeated, notRepeated] = partition(([alias]) => parentPkgs[alias] != null, Object.entries(children)) - const nodeIds = Array.from(new Set([...notRepeated, ...repeated].map(([, nodeId]) => nodeId))) + const nodeIds = Array.from(new Set([...repeated, ...notRepeated].map(([, nodeId]) => nodeId))) for (const nodeId of nodeIds) { if (!ctx.pathsByNodeIdPromises.has(nodeId)) {