fix: uninstall a dep from package that uses shared shrinkwrap

This commit is contained in:
Zoltan Kochan
2018-11-14 13:56:56 +02:00
parent 2686d68276
commit be0108ce63
3 changed files with 57 additions and 3 deletions

View File

@@ -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]
}
}

View File

@@ -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,

View File

@@ -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(),
}))