Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use Arborist for dedupe and prune #1395

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/content/cli-commands/npm-dedupe.md
Expand Up @@ -60,6 +60,8 @@ Modules
Note that this operation transforms the dependency tree, but will never
result in new modules being installed.

Using `npm find-dupes` will run the command in dryRun mode.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh if npm find-dupes is now a top-level command it'd be nice to also add docs for it and a link below in the See Also section of this file 👇

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure about creating a new docs file for this command since it is essentially the same as dedupe only on dryRun mode. What do you think about just pointing the find-dupes docs to the dedupe docs?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right! sounds good 👍

### See Also

* [npm ls](/cli-commands/ls)
Expand Down
2 changes: 1 addition & 1 deletion lib/config/cmd-list.js
Expand Up @@ -33,7 +33,6 @@ var affordances = {
'isntall-clean': 'ci',
'dist-tags': 'dist-tag',
'apihelp': 'help',
'find-dupes': 'dedupe',
'upgrade': 'update',
'udpate': 'update',
'login': 'adduser',
Expand Down Expand Up @@ -70,6 +69,7 @@ var cmdList = [
'outdated',
'prune',
'pack',
'find-dupes',
'dedupe',
'hook',

Expand Down
19 changes: 12 additions & 7 deletions lib/dedupe.js
@@ -1,19 +1,24 @@
// dedupe duplicated packages, or find them in the tree
const util = require('util')
const npm = require('./npm.js')
const Arborist = require('@npmcli/arborist')
const rimraf = util.promisify(require('rimraf'))
const reifyOutput = require('./utils/reify-output.js')
const usageUtil = require('./utils/usage.js')
const reifyOutput = require('./utils/reify-output.js')

const usage = usageUtil('dedupe', 'npm dedupe')

const completion = (cb) => cb(null, [])

const cmd = (args, cb) => dedupe(args).then(() => cb()).catch(cb)

const dedupe = async args => {
require('npmlog').warn('coming soon!')
throw new Error('not yet implemented')
const dedupe = async (args) => {
const dryRun = args.dryRun || npm.flatOptions.dryRun
const where = npm.prefix
const arb = new Arborist({
...npm.flatOptions,
path: where,
dryRun
})
await arb.dedupe()
claudiahdz marked this conversation as resolved.
Show resolved Hide resolved
reifyOutput(arb)
}

module.exports = Object.assign(cmd, { usage, completion })
9 changes: 9 additions & 0 deletions lib/find-dupes.js
@@ -0,0 +1,9 @@
// dedupe duplicated packages, or find them in the tree
const dedupe = require('./dedupe.js')
const usageUtil = require('./utils/usage.js')

const usage = usageUtil('find-dupes', 'npm find-dupes')
const completion = (cb) => cb(null, [])
const cmd = (args, cb) => dedupe({ dryRun: true } , cb)

module.exports = Object.assign(cmd, { usage, completion })
27 changes: 16 additions & 11 deletions lib/prune.js
@@ -1,20 +1,25 @@
// prune extraneous packages.
const util = require('util')
// prune extraneous packages
const npm = require('./npm.js')
const Arborist = require('@npmcli/arborist')
const rimraf = util.promisify(require('rimraf'))
const reifyOutput = require('./utils/reify-output.js')
const usageUtil = require('./utils/usage.js')

const usage = usageUtil('prune',
'npm prune [[<@scope>/]<pkg>...] [--production]')
const reifyOutput = require('./utils/reify-output.js')

const completion = require('./utils/completion/installed-deep.js')
const usage = usageUtil('prune',
'npm prune [[<@scope>/]<pkg>...] [--production]'
)
const completion = (cb) => cb(null, [])

const cmd = (args, cb) => prune(args).then(() => cb()).catch(cb)
const cmd = (args, cb) => prune().then(() => cb()).catch(cb)

const prune = async args => {
require('npmlog').warn('coming soon!')
throw new Error('not yet implemented')
const prune = async () => {
const where = npm.prefix
const arb = new Arborist({
...npm.flatOptions,
path: where
})
await arb.prune()
claudiahdz marked this conversation as resolved.
Show resolved Hide resolved
reifyOutput(arb)
}

module.exports = Object.assign(cmd, { usage, completion })