为什么 npm-remote-ls 缺少模块的 package.json 中列出的依赖项?

ato*_*3ls 5 javascript node.js npm

假设我有以下 Nodejs 脚本:

let ls = require('npm-remote-ls').ls
let config = require('npm-remote-ls').config
config({development:false,optional:true})
ls('node-gyp','9.3.1',console.log)
Run Code Online (Sandbox Code Playgroud)

它记录:

{
  'node-gyp@9.3.1': {
    'env-paths@2.2.1': {},
    'graceful-fs@4.2.11': {},
    'npmlog@6.0.2': {
      'are-we-there-yet@3.0.1': [Object],
      'set-blocking@2.0.0': {},
      'console-control-strings@1.1.0': {},
      'gauge@4.0.4': [Object]
    },
    'rimraf@3.0.2': { 'glob@7.2.3': {} },
    'glob@7.2.3': {
      'fs.realpath@1.0.0': {},
      'inflight@1.0.6': [Object],
      'inherits@2.0.4': {},
      'path-is-absolute@1.0.1': {},
      'minimatch@3.1.2': [Object],
      'once@1.4.0': [Object]
    },
    'semver@7.5.1': { 'lru-cache@6.0.0': [Object] },
    'make-fetch-happen@10.2.1': {
      'agentkeepalive@4.3.0': [Object],
      'http-cache-semantics@4.1.1': {},
      'cacache@16.1.3': [Object],
      'http-proxy-agent@5.0.0': [Object],
      'https-proxy-agent@5.0.1': [Object],
      'is-lambda@1.0.1': {},
      'minipass-collect@1.0.2': [Object],
      'lru-cache@7.18.3': {},
      'minipass@3.3.6': [Object],
      'minipass-flush@1.0.5': [Object],
      'minipass-pipeline@1.2.4': [Object],
      'promise-retry@2.0.1': [Object],
      'socks-proxy-agent@7.0.0': [Object],
      'ssri@9.0.1': [Object],
      'minipass-fetch@2.1.2': [Object],
      'negotiator@0.6.3': {}
    },
    'which@2.0.2': { 'isexe@2.0.0': {} },
    'tar@6.1.15': {
      'fs-minipass@2.1.0': [Object],
      'minipass@5.0.0': {},
      'minizlib@2.1.2': [Object],
      'mkdirp@1.0.4': {},
      'yallist@4.0.0': {},
      'chownr@2.0.0': {}
    },
    'nopt@6.0.0': { 'abbrev@1.1.1': {} }
  }
}
Run Code Online (Sandbox Code Playgroud)

node-gyp 的 package.json包含在"exponential-backoff": "^3.1.1",dependencies字段中,因此我希望在上面的输出中看到它;但我不是。

为什么我没有exponential-backoff列在 npm-remote-ls 的输出中?如何调整脚本以获得完整的依赖项列表?或者是否有另一种更简单的方法来获取完整的依赖项列表?

jQu*_*eny 2

版本9.3.1没有exponential-backoff依赖性,这就是它不显示的原因。请参阅此处的 9.3.1package.json版本。

如果您更改为它的latest版本,则10.0.1一个依赖项。

ls('node-gyp','latest',console.log)
Run Code Online (Sandbox Code Playgroud)

然后"exponential-backoff": "^3.1.1"就是:

{
  'node-gyp@10.0.1': {
    'semver@7.5.4': { 'lru-cache@6.0.0': [Object] },
    'nopt@7.2.0': { 'abbrev@2.0.0': {} },
    'which@4.0.0': { 'isexe@3.1.1': {} },
    'proc-log@3.0.0': {},
    'tar@6.2.0': {
      'fs-minipass@2.1.0': [Object],
      'minipass@5.0.0': {},
      'mkdirp@1.0.4': {},
      'minizlib@2.1.2': [Object],
      'chownr@2.0.0': {},
      'yallist@4.0.0': {}
    },
    'graceful-fs@4.2.11': {},
    'make-fetch-happen@13.0.0': {
      'cacache@18.0.0': [Object],
      'minipass-fetch@3.0.4': [Object],
      'minipass@7.0.4': {},
      'minipass-flush@1.0.5': [Object],
      'minipass-pipeline@1.2.4': [Object],
      'negotiator@0.6.3': {},
      'promise-retry@2.0.1': [Object],
      'ssri@10.0.5': [Object],
      'http-cache-semantics@4.1.1': {},
      'is-lambda@1.0.1': {},
      '@npmcli/agent@2.2.0': [Object]
    },
    'glob@10.3.10': {
      'foreground-child@3.1.1': [Object],
      'minimatch@9.0.3': [Object],
      'minipass@7.0.4': {},
      'jackspeak@2.3.6': [Object],
      'path-scurry@1.10.1': [Object]
    },
    'env-paths@2.2.1': {},
    'exponential-backoff@3.1.1': {}
  }
}
Run Code Online (Sandbox Code Playgroud)

看起来它是在 9.4.0版本中引入的,因此您可能正在查看版本之间的 git 提交。