mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-25 02:21:52 -04:00
fix: uninstall a dep from package that uses shared shrinkwrap
This commit is contained in:
@@ -72,7 +72,12 @@ export function prune (
|
||||
})
|
||||
if (importer.dependencies) {
|
||||
for (const dep of R.keys(importer.dependencies)) {
|
||||
if (!shrDependencies[dep] && importer.dependencies[dep].startsWith('link:')) {
|
||||
if (
|
||||
!shrDependencies[dep] && importer.dependencies[dep].startsWith('link:') &&
|
||||
// If the linked dependency was removed from package.json
|
||||
// then it is removed from shrinkwrap.yaml as well
|
||||
!(shrSpecs[dep] && !allDeps[dep])
|
||||
) {
|
||||
shrDependencies[dep] = importer.dependencies[dep]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,6 +71,38 @@ test('remove one redundant package', t => {
|
||||
t.end()
|
||||
})
|
||||
|
||||
test('remove redundant linked package', t => {
|
||||
t.deepEqual(prune({
|
||||
shrinkwrapVersion: 3,
|
||||
registry: 'https://registry.npmjs.org',
|
||||
importers: {
|
||||
'.': {
|
||||
dependencies: {
|
||||
'is-positive': 'link:../is-positive'
|
||||
},
|
||||
specifiers: {
|
||||
'is-positive': '^1.0.0'
|
||||
},
|
||||
},
|
||||
},
|
||||
packages: {},
|
||||
}, {
|
||||
name: 'foo',
|
||||
version: '1.0.0',
|
||||
dependencies: {}
|
||||
}, '.', DEFAULT_OPTS), {
|
||||
shrinkwrapVersion: 3,
|
||||
registry: 'https://registry.npmjs.org',
|
||||
importers: {
|
||||
'.': {
|
||||
specifiers: {},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
t.end()
|
||||
})
|
||||
|
||||
test('keep all', t => {
|
||||
t.deepEqual(prune({
|
||||
shrinkwrapVersion: 3,
|
||||
|
||||
@@ -190,6 +190,7 @@ test('uninstalling a dependency from package that uses shared shrinkwrap', async
|
||||
version: '1.0.0',
|
||||
dependencies: {
|
||||
'is-positive': '1.0.0',
|
||||
'project-2': '1.0.0',
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -210,12 +211,28 @@ test('uninstalling a dependency from package that uses shared shrinkwrap', async
|
||||
},
|
||||
]
|
||||
|
||||
await install(await testDefaults({ importers }))
|
||||
await install(await testDefaults({
|
||||
importers,
|
||||
localPackages: {
|
||||
'project-2': {
|
||||
'1.0.0': {
|
||||
directory: path.resolve('project-2'),
|
||||
package: {
|
||||
name: 'project-2',
|
||||
version: '1.0.0',
|
||||
dependencies: {
|
||||
'is-negative': '1.0.0',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}))
|
||||
|
||||
await projects['project-1'].has('is-positive')
|
||||
await projects['project-2'].has('is-negative')
|
||||
|
||||
await uninstall(['is-positive'], await testDefaults({
|
||||
await uninstall(['is-positive', 'project-2'], await testDefaults({
|
||||
prefix: importers[0].prefix,
|
||||
shrinkwrapDirectory: process.cwd(),
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user