mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-26 19:12:12 -04:00
feat: report dependency type when adding/removing
This commit is contained in:
@@ -16,7 +16,7 @@
|
||||
"lib/"
|
||||
],
|
||||
"peerDependencies": {
|
||||
"pnpm-logger": "^0.5.3"
|
||||
"pnpm-logger": "^0.5.4"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/byline": "^4.2.31",
|
||||
@@ -80,7 +80,7 @@
|
||||
"cz-conventional-changelog": "^2.0.0",
|
||||
"husky": "^0.13.2",
|
||||
"npm-scripts-info": "^0.3.6",
|
||||
"pnpm-logger": "^0.5.3",
|
||||
"pnpm-logger": "^0.5.4",
|
||||
"rimraf": "^2.5.4",
|
||||
"tslint": "^5.4.2",
|
||||
"typescript": "^2.4.1",
|
||||
|
||||
@@ -60,7 +60,7 @@ devDependencies:
|
||||
cz-conventional-changelog: 2.0.0
|
||||
husky: 0.13.4
|
||||
npm-scripts-info: 0.3.6
|
||||
pnpm-logger: 0.5.3
|
||||
pnpm-logger: 0.5.4
|
||||
tslint: 5.5.0
|
||||
typescript: 2.4.2
|
||||
validate-commit-msg: 2.14.0
|
||||
@@ -1595,14 +1595,14 @@ packages:
|
||||
bole: 3.0.2
|
||||
resolution:
|
||||
integrity: sha1-6uzqWgN/BTpkxQvafto8uH9e1mE=
|
||||
/pnpm-logger/0.5.3:
|
||||
/pnpm-logger/0.5.4:
|
||||
dependencies:
|
||||
'@types/node': 8.0.17
|
||||
bole: 3.0.2
|
||||
ndjson: 1.5.0
|
||||
dev: true
|
||||
resolution:
|
||||
integrity: sha512-uIDVA3VrDtzYPWuBRBR+/PVj2GqL7srSbT8V1fX7MVVHYzXLOfKrCGkY2rcWThn6lpBvq65BVebU5kFvxaEKaw==
|
||||
integrity: sha512-4qWj8oOPmzkAR395KInwnQU7/0MvPIz4Oz7tJa7v+VKDsUCL1sd7AEnvwgNQ2ZJ3NaELAsnkI6bNOsP4nT6mhg==
|
||||
/pnpm-shrinkwrap/3.1.0:
|
||||
dependencies:
|
||||
'@types/node': 7.0.39
|
||||
@@ -2257,7 +2257,7 @@ specifiers:
|
||||
path-exists: ^3.0.0
|
||||
path-name: ^1.0.0
|
||||
pnpm-install-checks: ^1.1.0
|
||||
pnpm-logger: ^0.5.3
|
||||
pnpm-logger: ^0.5.4
|
||||
pnpm-shrinkwrap: ^3.1.0
|
||||
proper-lockfile: ^2.0.0
|
||||
ramda: ^0.24.1
|
||||
|
||||
@@ -24,7 +24,13 @@ export default async function removeOrphanPkgs (
|
||||
const removedTopDeps: [string, string][] = R.difference(oldPkgs, newPkgs) as [string, string][]
|
||||
|
||||
const rootModules = path.join(opts.prefix, 'node_modules')
|
||||
await Promise.all(removedTopDeps.map(depName => removeTopDependency(depName[0], rootModules)))
|
||||
await Promise.all(removedTopDeps.map(depName => {
|
||||
return removeTopDependency({
|
||||
name: depName[0],
|
||||
dev: Boolean(opts.oldShrinkwrap.devDependencies && opts.oldShrinkwrap.devDependencies[depName[0]]),
|
||||
optional: Boolean(opts.oldShrinkwrap.optionalDependencies && opts.oldShrinkwrap.optionalDependencies[depName[0]]),
|
||||
}, rootModules)
|
||||
}))
|
||||
|
||||
const oldPkgIds = R.keys(opts.oldShrinkwrap.packages).map(depPath => dp.resolve(opts.oldShrinkwrap.registry, depPath))
|
||||
const newPkgIds = R.keys(opts.newShrinkwrap.packages).map(depPath => dp.resolve(opts.newShrinkwrap.registry, depPath))
|
||||
|
||||
@@ -96,9 +96,14 @@ async function removeOuterLinks (
|
||||
storePath: string,
|
||||
}
|
||||
) {
|
||||
// These packages are not in package.json, they were just linked in not installed
|
||||
for (const pkgToUninstall of pkgsToUninstall) {
|
||||
if (!await safeIsInnerLink(modules, pkgToUninstall, opts)) {
|
||||
await removeTopDependency(pkgToUninstall, modules)
|
||||
await removeTopDependency({
|
||||
name: pkgToUninstall,
|
||||
dev: false,
|
||||
optional: false,
|
||||
}, modules)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ export default async function (
|
||||
id: pkg.id,
|
||||
name: pkg.name,
|
||||
version: pkg.version,
|
||||
dependencyType: pkg.dev && 'dev' || pkg.optional && 'optional' || 'prod',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -4,17 +4,25 @@ import binify from './binify'
|
||||
import {fromDir as safeReadPkgFromDir} from './fs/safeReadPkg'
|
||||
import {rootLogger} from 'pnpm-logger'
|
||||
|
||||
export default async function removeTopDependency (dependencyName: string, modules: string) {
|
||||
export default async function removeTopDependency (
|
||||
dependency: {
|
||||
name: string,
|
||||
dev: boolean,
|
||||
optional: boolean,
|
||||
},
|
||||
modules: string
|
||||
) {
|
||||
const results = await Promise.all([
|
||||
removeBins(dependencyName, modules),
|
||||
rimraf(path.join(modules, dependencyName)),
|
||||
removeBins(dependency.name, modules),
|
||||
rimraf(path.join(modules, dependency.name)),
|
||||
])
|
||||
|
||||
const uninstalledPkg = results[0]
|
||||
rootLogger.info({
|
||||
removed: {
|
||||
name: dependencyName,
|
||||
name: dependency.name,
|
||||
version: uninstalledPkg && uninstalledPkg.version,
|
||||
dependencyType: dependency.dev && 'dev' || dependency.optional && 'optional' || 'prod'
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ test('no dependencies (lodash)', async (t: tape.Test) => {
|
||||
added: {
|
||||
name: 'lodash',
|
||||
version: '4.0.0',
|
||||
dependencyType: 'prod',
|
||||
},
|
||||
}), 'added to root')
|
||||
|
||||
@@ -139,6 +140,7 @@ test('update a package when installing with a dist-tag', async function (t: tape
|
||||
removed: {
|
||||
name: 'dep-of-pkg-with-1-dep',
|
||||
version: '100.0.0',
|
||||
dependencyType: 'dev',
|
||||
},
|
||||
}), 'reported old version removed from the root')
|
||||
|
||||
@@ -148,6 +150,7 @@ test('update a package when installing with a dist-tag', async function (t: tape
|
||||
added: {
|
||||
name: 'dep-of-pkg-with-1-dep',
|
||||
version: '100.1.0',
|
||||
dependencyType: 'dev',
|
||||
},
|
||||
}), 'reported new version added to the root')
|
||||
|
||||
@@ -202,6 +205,7 @@ test('idempotency (rimraf)', async (t: tape.Test) => {
|
||||
added: {
|
||||
name: 'rimraf',
|
||||
version: '2.5.1',
|
||||
dependencyType: 'prod',
|
||||
},
|
||||
}), 'reported that rimraf added to the root')
|
||||
|
||||
@@ -215,6 +219,7 @@ test('idempotency (rimraf)', async (t: tape.Test) => {
|
||||
added: {
|
||||
name: 'rimraf',
|
||||
version: '2.5.1',
|
||||
dependencyType: 'prod',
|
||||
},
|
||||
}), 'did not reported that rimraf was added because it was already there')
|
||||
|
||||
@@ -238,6 +243,7 @@ test('reporting adding root package', async (t: tape.Test) => {
|
||||
added: {
|
||||
name: 'flatten',
|
||||
version: '1.0.2',
|
||||
dependencyType: 'prod',
|
||||
},
|
||||
}), 'reported that flatten added to the root')
|
||||
})
|
||||
|
||||
@@ -42,6 +42,7 @@ test('uninstall package with no dependencies', async (t: tape.Test) => {
|
||||
removed: {
|
||||
name: 'is-negative',
|
||||
version: '2.1.0',
|
||||
dependencyType: 'prod',
|
||||
},
|
||||
}), 'removing root dependency reported')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user