/
uninstall.js
50 lines (40 loc) · 1.24 KB
/
uninstall.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
const { resolve } = require('path')
const Arborist = require('@npmcli/arborist')
const rpj = require('read-package-json-fast')
const npm = require('./npm.js')
const usageUtil = require('./utils/usage.js')
const reifyFinish = require('./utils/reify-finish.js')
const completion = require('./utils/completion/installed-shallow.js')
const usage = usageUtil(
'uninstall',
'npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|--no-save]'
)
const cmd = (args, cb) => rm(args).then(() => cb()).catch(cb)
const rm = async args => {
// the /path/to/node_modules/..
const { global, prefix } = npm.flatOptions
const path = global ? resolve(npm.globalDir, '..') : prefix
if (!args.length) {
if (!global)
throw new Error('Must provide a package name to remove')
else {
let pkg
try {
pkg = await rpj(resolve(npm.localPrefix, 'package.json'))
} catch (er) {
if (er.code !== 'ENOENT' && er.code !== 'ENOTDIR')
throw er
else
throw usage
}
args.push(pkg.name)
}
}
const arb = new Arborist({ ...npm.flatOptions, path })
await arb.reify({
...npm.flatOptions,
rm: args,
})
await reifyFinish(arb)
}
module.exports = Object.assign(cmd, { usage, completion })