fix: resolving peer deps from deps of root project (#3559)

This commit is contained in:
Zoltan Kochan
2021-06-24 10:53:50 +03:00
committed by GitHub
parent f3599aaf97
commit 3898585093
3 changed files with 46 additions and 4 deletions

View File

@@ -0,0 +1,5 @@
---
"@pnpm/resolve-dependencies": patch
---
Dependencies from the root workspace package should be used to resolve peer dependencies of any projects in the workspace.

View File

@@ -116,7 +116,7 @@ export default async function<T> (
// This may be optimized.
// We only need to proceed resolving every dependency
// if the newly added dependency has peer dependencies.
const proceed = importer.hasRemovedDependencies === true || importer.wantedDependencies.some((wantedDep) => wantedDep['isNew'])
const proceed = importer.id === '.' || importer.hasRemovedDependencies === true || importer.wantedDependencies.some((wantedDep) => wantedDep['isNew'])
const resolveOpts = {
currentDepth: 0,
parentPkg: {

View File

@@ -207,7 +207,7 @@ test('peer dependency is resolved from the dependencies of the workspace root pr
{
buildIndex: 0,
manifest: {
name: 'root',
name: 'pkg',
version: '1.0.0',
dependencies: {
@@ -223,8 +223,45 @@ test('peer dependency is resolved from the dependencies of the workspace root pr
message: 'ajv-keywords@1.5.0 requires a peer of ajv@>=4.10.0 but none was installed.',
})
const lockfile = await projects.root.readLockfile()
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0')
{
const lockfile = await projects.root.readLockfile()
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0')
}
await mutateModules([
{
buildIndex: 0,
manifest: {
name: 'root',
version: '1.0.0',
dependencies: {
ajv: '4.10.0',
},
},
mutation: 'install',
rootDir: process.cwd(),
},
{
buildIndex: 0,
manifest: {
name: 'pkg',
version: '1.0.0',
dependencies: {
'ajv-keywords': '1.5.0',
'is-positive': '1.0.0',
},
},
mutation: 'install',
rootDir: path.resolve('pkg'),
},
], await testDefaults({ reporter }))
{
const lockfile = await projects.root.readLockfile()
expect(lockfile.importers.pkg?.dependencies?.['ajv-keywords']).toBe('1.5.0_ajv@4.10.0')
}
})
test('warning is reported when cannot resolve peer dependency for non-top-level dependency', async () => {