diff --git a/.changeset/lazy-brooms-search.md b/.changeset/lazy-brooms-search.md new file mode 100644 index 0000000000..32ea8475dd --- /dev/null +++ b/.changeset/lazy-brooms-search.md @@ -0,0 +1,6 @@ +--- +"@pnpm/resolve-dependencies": patch +pnpm: patch +--- + +Fix a case of installs not being deterministic and causing lockfile changes between repeat installs. When a dependency only declares `peerDependenciesMeta` and not `peerDependencies`, `dependencies`, or `optionalDependencies`, the dependency's peers were not considered deterministically before. diff --git a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts index 3495963a44..0c5e8e7afc 100644 --- a/pkg-manager/resolve-dependencies/src/resolveDependencies.ts +++ b/pkg-manager/resolve-dependencies/src/resolveDependencies.ts @@ -1377,7 +1377,10 @@ function getMissingPeers (pkg: PackageManifest) { function pkgIsLeaf (pkg: PackageManifest) { return isEmpty(pkg.dependencies ?? {}) && isEmpty(pkg.optionalDependencies ?? {}) && - isEmpty(pkg.peerDependencies ?? {}) + isEmpty(pkg.peerDependencies ?? {}) && + // Package manifests can declare peerDependenciesMeta without declaring + // peerDependencies. peerDependenciesMeta implies the later. + isEmpty(pkg.peerDependenciesMeta ?? {}) } function getResolvedPackage (