From 103ad74871b4ebbd2b6680c0a0de2b3e271cca02 Mon Sep 17 00:00:00 2001 From: levinqdl Date: Wed, 29 Jul 2020 22:32:28 +0800 Subject: [PATCH] fix: lockfile not updated when remove dependency in project with readPackage hook Co-authored-by: qdl PR #2726 --- .changeset/cold-feet-arrive.md | 6 ++++++ packages/pnpm/test/hooks.ts | 15 ++++++++++----- packages/supi/src/install/index.ts | 10 +++++----- 3 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 .changeset/cold-feet-arrive.md diff --git a/.changeset/cold-feet-arrive.md b/.changeset/cold-feet-arrive.md new file mode 100644 index 0000000000..9092090344 --- /dev/null +++ b/.changeset/cold-feet-arrive.md @@ -0,0 +1,6 @@ +--- +"pnpm": patch +"supi": patch +--- + +fix lockfile not updated when remove dependency in project with readPackage hook diff --git a/packages/pnpm/test/hooks.ts b/packages/pnpm/test/hooks.ts index 4a34a8e330..464f675f10 100644 --- a/packages/pnpm/test/hooks.ts +++ b/packages/pnpm/test/hooks.ts @@ -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 } ` diff --git a/packages/supi/src/install/index.ts b/packages/supi/src/install/index.ts index 8cf49d7d61..2aa0ebc57e 100644 --- a/packages/supi/src/install/index.ts +++ b/packages/supi/src/install/index.ts @@ -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) + } }) )