Skip to content

Commit

Permalink
fix: npm ls --long missing deps
Browse files Browse the repository at this point in the history
Running `npm ls --json --long --all` was broken for any project
containing a missing dependency from the node_modules folder. This
fixes it by avoiding trying to read the extra data required by the
--long option in case a dependency is missing.

Fixes: #2724

PR-URL: #3119
Credit: @ruyadorno
Close: #3119
Reviewed-by: @wraithgar
  • Loading branch information
ruyadorno committed Apr 22, 2021
1 parent c4ff4bc commit 2aecec5
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/ls.js
Expand Up @@ -305,7 +305,7 @@ const getJsonOutputItem = (node, { global, long }) => {
if (node.isRoot && hasPackageJson)
item.name = node.package.name || node.name

if (long) {
if (long && !node[_missing]) {
item.name = item[_name]
const { dependencies, ...packageInfo } = node.package
Object.assign(item, packageInfo)
Expand Down
42 changes: 42 additions & 0 deletions test/lib/ls.js
Expand Up @@ -2489,6 +2489,48 @@ t.test('ls --json', (t) => {
})
})

t.test('missing deps --long', (t) => {
config.long = true
npm.prefix = t.testdir({
'package.json': JSON.stringify({
name: 'test-npm-ls',
version: '1.0.0',
dependencies: {
foo: '^1.0.0',
bar: '^1.0.0',
lorem: '^1.0.0',
ipsum: '^1.0.0',
},
}),
...simpleNmFixture,
})
ls.exec([], (err) => {
t.equal(
redactCwd(err.message),
'missing: ipsum@^1.0.0, required by test-npm-ls@1.0.0',
'should log missing dep as error'
)
t.equal(
err.code,
'ELSPROBLEMS',
'should have ELSPROBLEMS error code'
)
t.match(
jsonParse(result),
{
name: 'test-npm-ls',
version: '1.0.0',
problems: [
'missing: ipsum@^1.0.0, required by test-npm-ls@1.0.0',
],
},
'should output json containing problems info'
)
config.long = false
t.end()
})
})

t.test('with filter arg', (t) => {
npm.prefix = t.testdir({
'package.json': JSON.stringify({
Expand Down

0 comments on commit 2aecec5

Please sign in to comment.