mirror of
https://github.com/pnpm/pnpm.git
synced 2025-12-24 07:38:12 -05:00
feat!: remove the resolution-strategy setting
This commit is contained in:
8
.changeset/old-rockets-film.md
Normal file
8
.changeset/old-rockets-film.md
Normal 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.
|
||||
@@ -110,7 +110,6 @@ export interface Config {
|
||||
modulesDir?: string,
|
||||
sharedWorkspaceLockfile?: boolean,
|
||||
useLockfile: boolean,
|
||||
resolutionStrategy: 'fast' | 'fewer-dependencies',
|
||||
globalPnpmfile?: string,
|
||||
npmPath?: string,
|
||||
gitChecks?: boolean,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -35,7 +35,6 @@ export function rcOptionsTypes () {
|
||||
'production',
|
||||
'registry',
|
||||
'reporter',
|
||||
'resolution-strategy',
|
||||
'save-dev',
|
||||
'save-exact',
|
||||
'save-optional',
|
||||
|
||||
@@ -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,
|
||||
],
|
||||
},
|
||||
|
||||
@@ -39,7 +39,6 @@ export function cliOptionsTypes () {
|
||||
'production',
|
||||
'registry',
|
||||
'reporter',
|
||||
'resolution-strategy',
|
||||
'save-dev',
|
||||
'save-exact',
|
||||
'save-optional',
|
||||
|
||||
@@ -57,7 +57,6 @@ export function rcOptionsTypes () {
|
||||
'package-import-method',
|
||||
'pnpmfile',
|
||||
'reporter',
|
||||
'resolution-strategy',
|
||||
'save-dev',
|
||||
'save-optional',
|
||||
'save-prod',
|
||||
|
||||
@@ -42,7 +42,6 @@ export function rcOptionsTypes () {
|
||||
'production',
|
||||
'registry',
|
||||
'reporter',
|
||||
'resolution-strategy',
|
||||
'save',
|
||||
'save-exact',
|
||||
'shamefully-flatten',
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
]
|
||||
)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user