fix: lockfile not updated when remove dependency in project with readPackage hook

Co-authored-by: qdl <levinqdl@magicengine.com.cn>

PR #2726
This commit is contained in:
levinqdl
2020-07-29 22:32:28 +08:00
committed by GitHub
parent 2a41ce95c4
commit 103ad74871
3 changed files with 21 additions and 10 deletions

View File

@@ -0,0 +1,6 @@
---
"pnpm": patch
"supi": patch
---
fix lockfile not updated when remove dependency in project with readPackage hook

View File

@@ -14,8 +14,10 @@ test('readPackage hook in single project doesn\'t modify manifest', async (t) =>
const pnpmfile = `
module.exports = { hooks: { readPackage } }
function readPackage (pkg) {
pkg.dependencies = pkg.dependencies || {}
pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0'
if (pkg.name === 'project') {
pkg.dependencies = pkg.dependencies || {}
pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0'
}
return pkg
}
`
@@ -36,9 +38,10 @@ test('readPackage hook in single project doesn\'t modify manifest', async (t) =>
await execPnpm(['remove', 'is-positive'])
pkg = await loadJsonFile(path.resolve('package.json'))
t.notOk(pkg.dependencies, 'remove & readPackage hook work')
await project.hasNot('is-positive')
})
test.skip('readPackage hook in monorepo doesn\'t modify manifest', async (t) => {
test('readPackage hook in monorepo doesn\'t modify manifest', async (t) => {
const projects = preparePackages(t, [
{
name: 'project-a',
@@ -53,8 +56,10 @@ test.skip('readPackage hook in monorepo doesn\'t modify manifest', async (t) =>
const pnpmfile = `
module.exports = { hooks: { readPackage } }
function readPackage (pkg) {
pkg.dependencies = pkg.dependencies || {}
pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0'
if (pkg.name === 'project-a') {
pkg.dependencies = pkg.dependencies || {}
pkg.dependencies['dep-of-pkg-with-1-dep'] = '100.1.0'
}
return pkg
}
`

View File

@@ -574,11 +574,11 @@ async function installInContext (
projects
.map(async (project) => {
if (project.mutation !== 'uninstallSome') return
const field = project.originalManifest ? 'originalManifest' : 'manifest'
project[field] = await removeDeps(project[field] as ProjectManifest, project.dependencyNames, {
prefix: project.rootDir,
saveType: project.targetDependenciesField,
})
const _removeDeps = (manifest: ProjectManifest) => removeDeps(manifest, project.dependencyNames, { prefix: project.rootDir, saveType: project.targetDependenciesField })
project.manifest = await _removeDeps(project.manifest)
if (project.originalManifest) {
project.originalManifest = await _removeDeps(project.originalManifest)
}
})
)