fix(supi): never do full resolution when package manifest is ignored (#3579)

Close #3576
This commit is contained in:
Xingcan LAN
2021-07-04 20:04:50 +08:00
committed by GitHub
parent ed07cb97c5
commit b3478c756a
3 changed files with 22 additions and 5 deletions

View File

@@ -0,0 +1,5 @@
---
"supi": patch
---
Never do full resolution when package manifest is ignored

View File

@@ -190,12 +190,15 @@ export async function mutateModules (
async function _install (): Promise<Array<{ rootDir: string, manifest: ProjectManifest }>> {
const packageExtensionsChecksum = isEmpty(packageExtensions ?? {}) ? undefined : createObjectChecksum(packageExtensions!)
let needsFullResolution = !equals(ctx.wantedLockfile.overrides ?? {}, overrides ?? {}) ||
let needsFullResolution = !maybeOpts.ignorePackageManifest && (
!equals(ctx.wantedLockfile.overrides ?? {}, overrides ?? {}) ||
!equals((ctx.wantedLockfile.neverBuiltDependencies ?? []).sort(), (neverBuiltDependencies ?? []).sort()) ||
ctx.wantedLockfile.packageExtensionsChecksum !== packageExtensionsChecksum
ctx.wantedLockfile.overrides = overrides
ctx.wantedLockfile.neverBuiltDependencies = neverBuiltDependencies
ctx.wantedLockfile.packageExtensionsChecksum = packageExtensionsChecksum
ctx.wantedLockfile.packageExtensionsChecksum !== packageExtensionsChecksum)
if (needsFullResolution) {
ctx.wantedLockfile.overrides = overrides
ctx.wantedLockfile.neverBuiltDependencies = neverBuiltDependencies
ctx.wantedLockfile.packageExtensionsChecksum = packageExtensionsChecksum
}
const frozenLockfile = opts.frozenLockfile ||
opts.frozenLockfileIfExists && ctx.existsWantedLockfile
if (

View File

@@ -36,6 +36,15 @@ test('versions are replaced with versions specified through pnpm.overrides field
const currentLockfile = await project.readCurrentLockfile()
expect(lockfile.overrides).toStrictEqual(currentLockfile.overrides)
}
// shall be able to install when package manifest is ignored
await mutateModules([
{
buildIndex: 0,
manifest,
mutation: 'install',
rootDir: process.cwd(),
},
], { ...await testDefaults(), ignorePackageManifest: true })
// The lockfile is updated if the overrides are changed
manifest.pnpm!.overrides!['bar@^100.0.0'] = '100.0.0'