feat!: remove the resolution-strategy setting

This commit is contained in:
Zoltan Kochan
2020-05-23 01:35:27 +03:00
parent 77bc9b5109
commit e11019b896
13 changed files with 23 additions and 67 deletions

View File

@@ -0,0 +1,8 @@
---
"@pnpm/config": major
"@pnpm/plugin-commands-installation": major
"@pnpm/resolve-dependencies": major
"supi": minor
---
Deprecate the resolution strategy setting. The fewer dependencies strategy is used always.

View File

@@ -110,7 +110,6 @@ export interface Config {
modulesDir?: string,
sharedWorkspaceLockfile?: boolean,
useLockfile: boolean,
resolutionStrategy: 'fast' | 'fewer-dependencies',
globalPnpmfile?: string,
npmPath?: string,
gitChecks?: boolean,

View File

@@ -62,7 +62,6 @@ export const types = Object.assign({
'production': [null, true],
'publish-branch': String,
'reporter': String,
'resolution-strategy': ['fast', 'fewer-dependencies'],
'save-peer': Boolean,
'save-workspace-protocol': Boolean,
'shamefully-flatten': Boolean,
@@ -147,7 +146,6 @@ export default async (
'package-lock': npmDefaults['package-lock'],
'pending': false,
'registry': npmDefaults.registry,
'resolution-strategy': 'fewer-dependencies',
'save-peer': false,
'save-workspace-protocol': true,
'shamefully-hoist': false,

View File

@@ -35,7 +35,6 @@ export function rcOptionsTypes () {
'production',
'registry',
'reporter',
'resolution-strategy',
'save-dev',
'save-exact',
'save-optional',

View File

@@ -36,7 +36,6 @@ export function rcOptionsTypes () {
'production',
'registry',
'reporter',
'resolution-strategy',
'shamefully-flatten',
'shamefully-hoist',
'shared-workspace-lockfile',
@@ -189,14 +188,6 @@ export function help () {
description: 'Clone (aka copy-on-write) packages from the store',
name: '--package-import-method clone',
},
{
description: 'The default resolution strategy. Speed is preferred over deduplication',
name: '--resolution-strategy fast',
},
{
description: 'Already installed dependencies are preferred even if newer versions satisfy a range',
name: '--resolution-strategy fewer-dependencies',
},
...UNIVERSAL_OPTIONS,
],
},

View File

@@ -39,7 +39,6 @@ export function cliOptionsTypes () {
'production',
'registry',
'reporter',
'resolution-strategy',
'save-dev',
'save-exact',
'save-optional',

View File

@@ -57,7 +57,6 @@ export function rcOptionsTypes () {
'package-import-method',
'pnpmfile',
'reporter',
'resolution-strategy',
'save-dev',
'save-optional',
'save-prod',

View File

@@ -42,7 +42,6 @@ export function rcOptionsTypes () {
'production',
'registry',
'reporter',
'resolution-strategy',
'save',
'save-exact',
'shamefully-flatten',

View File

@@ -56,7 +56,6 @@ export default async function (
},
nodeVersion: string,
registries: Registries,
resolutionStrategy?: 'fast' | 'fewer-dependencies',
pnpmVersion: string,
linkWorkspacePackagesDepth?: number,
lockfileDir: string,
@@ -103,7 +102,6 @@ export default async function (
linkedDependencies,
modulesDir: importer.modulesDir,
prefix: importer.rootDir,
resolutionStrategy: opts.resolutionStrategy || 'fast',
}
// This may be optimized.
// We only need to proceed resolving every dependency

View File

@@ -142,7 +142,6 @@ export interface ResolutionContext {
pnpmVersion: string,
registries: Registries,
virtualStoreDir: string,
resolutionStrategy: 'fast' | 'fewer-dependencies',
}
export type PkgAddress = {
@@ -240,8 +239,7 @@ export default async function resolveDependencies (
readPackageHook: options.readPackageHook,
workspacePackages: options.workspacePackages,
}
const postponedResolutionsQueue = ctx.resolutionStrategy === 'fewer-dependencies'
? [] as Array<(preferredVersions: PreferredVersions) => Promise<void>> : undefined
const postponedResolutionsQueue = [] as Array<(preferredVersions: PreferredVersions) => Promise<void>>
const pkgAddresses = (
await Promise.all(
extendedWantedDeps
@@ -322,11 +320,7 @@ export default async function resolveDependencies (
}
}
if (postponedResolutionsQueue) {
postponedResolutionsQueue.push(resolveChildren)
} else {
await resolveChildren(options.preferredVersions)
}
postponedResolutionsQueue.push(resolveChildren)
return resolveDependencyResult
})
@@ -334,20 +328,18 @@ export default async function resolveDependencies (
)
.filter(Boolean) as PkgAddress[]
if (postponedResolutionsQueue) {
const newPreferredVersions = {
...options.preferredVersions,
}
for (const { pkgId } of pkgAddresses) {
const resolvedPackage = ctx.resolvedPackagesByPackageId[pkgId]
if (!resolvedPackage) continue // This will happen only with linked dependencies
if (!newPreferredVersions[resolvedPackage.name]) {
newPreferredVersions[resolvedPackage.name] = {}
}
newPreferredVersions[resolvedPackage.name][resolvedPackage.version] = 'version'
}
await Promise.all(postponedResolutionsQueue.map((postponedResolution) => postponedResolution(newPreferredVersions)))
const newPreferredVersions = {
...options.preferredVersions,
}
for (const { pkgId } of pkgAddresses) {
const resolvedPackage = ctx.resolvedPackagesByPackageId[pkgId]
if (!resolvedPackage) continue // This will happen only with linked dependencies
if (!newPreferredVersions[resolvedPackage.name]) {
newPreferredVersions[resolvedPackage.name] = {}
}
newPreferredVersions[resolvedPackage.name][resolvedPackage.version] = 'version'
}
await Promise.all(postponedResolutionsQueue.map((postponedResolution) => postponedResolution(newPreferredVersions)))
return pkgAddresses
}

View File

@@ -31,7 +31,6 @@ export interface StrictInstallOptions {
update: boolean,
updatePackageManifest: boolean,
depth: number,
resolutionStrategy: 'fast' | 'fewer-dependencies',
lockfileDir: string,
modulesDir: string,
rawConfig: object,
@@ -114,7 +113,6 @@ const defaults = async (opts: InstallOptions) => {
pruneStore: false,
rawConfig: {},
registries: DEFAULT_REGISTRIES,
resolutionStrategy: 'fast',
saveWorkspaceProtocol: true,
shamefullyHoist: false,
sideEffectsCacheRead: false,

View File

@@ -630,7 +630,6 @@ async function installInContext (
nodeVersion: opts.nodeVersion,
pnpmVersion: opts.packageManager.name === 'pnpm' ? opts.packageManager.version : '',
registries: opts.registries,
resolutionStrategy: opts.resolutionStrategy,
storeController: opts.storeController,
tag: opts.tag,
virtualStoreDir: ctx.virtualStoreDir,

View File

@@ -158,14 +158,14 @@ test('prefer version ranges passed in via opts.preferredVersions', async (t: tap
})
// Covers https://github.com/pnpm/pnpm/issues/1187
test('resolution-strategy=fewer-dependencies: prefer version of package that also satisfies the range of the same package higher in the dependency graph', async (t: tape.Test) => {
test('prefer version of package that also satisfies the range of the same package higher in the dependency graph', async (t: tape.Test) => {
const project = prepareEmpty(t)
await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' })
await addDependenciesToPackage(
{},
['has-foo-as-dep-and-subdep'],
await testDefaults({ resolutionStrategy: 'fewer-dependencies' })
await testDefaults()
)
const lockfile = await project.readLockfile()
@@ -179,26 +179,3 @@ test('resolution-strategy=fewer-dependencies: prefer version of package that als
]
)
})
test('resolution-strategy=fast: always prefer the latest version', async (t: tape.Test) => {
const project = prepareEmpty(t)
await addDistTag({ package: 'foo', version: '100.1.0', distTag: 'latest' })
await addDependenciesToPackage(
{},
['has-foo-as-dep-and-subdep'],
await testDefaults({ resolutionStrategy: 'fast' })
)
const lockfile = await project.readLockfile()
t.deepEqual(
Object.keys(lockfile.packages),
[
'/foo/100.0.0',
'/foo/100.1.0',
'/has-foo-as-dep-and-subdep/1.0.0',
'/requires-any-foo/1.0.0',
]
)
})