diff options
author | Ruy Adorno <ruyadorno@hotmail.com> | 2021-04-22 01:43:05 +0300 |
---|---|---|
committer | Ruy Adorno <ruyadorno@hotmail.com> | 2021-04-22 16:58:13 +0300 |
commit | 2aecec591df6866e27d0b17dc49cef8f7d738d77 (patch) | |
tree | e3e8a2ac5b1192be9e37496a0cd97ea62ef7d00d | |
parent | c4ff4bc113c3a5b6ee5d74ab0b1adee95169ed32 (diff) |
fix: npm ls --long missing deps
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: https://github.com/npm/cli/issues/2724
PR-URL: https://github.com/npm/cli/pull/3119
Credit: @ruyadorno
Close: #3119
Reviewed-by: @wraithgar
-rw-r--r-- | lib/ls.js | 2 | ||||
-rw-r--r-- | test/lib/ls.js | 42 |
2 files changed, 43 insertions, 1 deletions
@@ -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) diff --git a/test/lib/ls.js b/test/lib/ls.js index 5b13f808d..2918fd482 100644 --- a/test/lib/ls.js +++ b/test/lib/ls.js @@ -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({ |