mirror of
https://github.com/pnpm/pnpm.git
synced 2026-05-07 15:38:24 -04:00
fix(link): report correct dependency types when linking
@pnpm/utils: BREAKING CHANGE: the order of dependency types changed. optionalDependencies is first
This commit is contained in:
@@ -830,7 +830,9 @@ function getAliasToDependencyTypeMap (pkg: PackageJson) {
|
||||
for (const depType of dependenciesTypes) {
|
||||
if (!pkg[depType]) continue
|
||||
for (const alias of Object.keys(pkg[depType] || {})) {
|
||||
depTypesOfAliases[alias] = depType
|
||||
if (!depTypesOfAliases[alias]) {
|
||||
depTypesOfAliases[alias] = depType
|
||||
}
|
||||
}
|
||||
}
|
||||
return depTypesOfAliases
|
||||
|
||||
@@ -27,11 +27,10 @@ import R = require('ramda')
|
||||
import symlinkDir = require('symlink-dir')
|
||||
import getSpecFromPackageJson from '../getSpecFromPackageJson'
|
||||
import readShrinkwrapFile from '../readShrinkwrapFiles'
|
||||
import save from '../save'
|
||||
import save, { guessDependencyType } from '../save'
|
||||
import extendOptions, {
|
||||
InstallOptions,
|
||||
} from './extendInstallOptions'
|
||||
import {install} from './install'
|
||||
import getPref from './utils/getPref'
|
||||
|
||||
export default async function link (
|
||||
@@ -74,7 +73,7 @@ export default async function link (
|
||||
saveExact: opts.saveExact,
|
||||
savePrefix: opts.savePrefix,
|
||||
}),
|
||||
saveType: saveType as DependenciesType,
|
||||
saveType: (saveType || pkg && guessDependencyType(linkedPkg.name, pkg)) as DependenciesType,
|
||||
})
|
||||
|
||||
const packagePath = normalize(path.relative(opts.prefix, linkFrom))
|
||||
@@ -106,7 +105,12 @@ export default async function link (
|
||||
// Linking should happen after removing orphans
|
||||
// Otherwise would've been removed
|
||||
for (const linkedPkg of linkedPkgs) {
|
||||
await linkToModules(linkedPkg.pkg, linkedPkg.path, destModules, {saveType, prefix: opts.prefix})
|
||||
// TODO: cover with test that linking reports with correct dependency types
|
||||
const stu = specsToUpsert.find((s) => s.name === linkedPkg.pkg.name)
|
||||
await linkToModules(linkedPkg.pkg, linkedPkg.path, destModules, {
|
||||
prefix: opts.prefix,
|
||||
saveType: stu && stu.saveType || saveType,
|
||||
})
|
||||
}
|
||||
|
||||
const linkToBin = maybeOpts && maybeOpts.linkToBin || path.join(destModules, '.bin')
|
||||
@@ -144,7 +148,7 @@ function addLinkToShrinkwrap (
|
||||
const id = `link:${opts.packagePath}`
|
||||
let addedTo: DependenciesType | undefined
|
||||
for (const depType of dependenciesTypes) {
|
||||
if (opts.pkg && opts.pkg[depType]) {
|
||||
if (!addedTo && opts.pkg && opts.pkg[depType] && opts.pkg[depType]![opts.linkedPkgName]) {
|
||||
addedTo = depType
|
||||
shr[depType] = shr[depType] || {}
|
||||
shr[depType]![opts.linkedPkgName] = id
|
||||
|
||||
@@ -59,7 +59,7 @@ function findSpec (depName: string, pkg: PackageJson): string | undefined {
|
||||
return foundDepType && pkg[foundDepType]![depName]
|
||||
}
|
||||
|
||||
function guessDependencyType (depName: string, pkg: PackageJson): DependenciesType | undefined {
|
||||
export function guessDependencyType (depName: string, pkg: PackageJson): DependenciesType | undefined {
|
||||
return dependenciesTypes
|
||||
.find((deptype) => Boolean(pkg[deptype] && pkg[deptype]![depName]))
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {PnpmOptions} from '@pnpm/types'
|
||||
export type DependenciesType = 'dependencies' | 'devDependencies' | 'optionalDependencies'
|
||||
|
||||
export const dependenciesTypes: DependenciesType[] = ['dependencies', 'devDependencies', 'optionalDependencies']
|
||||
export const dependenciesTypes: DependenciesType[] = ['optionalDependencies', 'dependencies', 'devDependencies']
|
||||
|
||||
export default function getSaveType (opts: PnpmOptions): DependenciesType | undefined {
|
||||
if (opts.saveDev) return 'devDependencies'
|
||||
|
||||
Reference in New Issue
Block a user