如何查看给定 npm 模块的依赖树?
Posted
技术标签:
【中文标题】如何查看给定 npm 模块的依赖树?【英文标题】:How to view the dependency tree of a given npm module? 【发布时间】:2014-11-17 19:15:55 【问题描述】:如何获取可用于 npm 但未安装在本地的模块树?
npm ll
为本地安装的软件包完成这项工作。但它不适用于未安装的模块或全局安装的模块。
我试过npm list bower
,但不是这样。
【问题讨论】:
如果您只需要依赖图,npm.broofa.com 和 npm.anvaka.com 将为公开发布的模块执行此操作。 @broofa 感谢这些链接!我建议您将它们发布为答案。我在 @angular/cli 和 npm.anvaka.com 上都检查过,速度缓慢且难以阅读,但 npm.broofa.com 做得很好 【参考方案1】:无需安装即可生成 NPM 依赖树 使用命令的依赖项
npm list
这将为当前目录下的项目生成一个依赖树,并将其打印到控制台。
你可以像这样获取特定依赖的依赖树:
npm list [dependency]
您也可以通过这样做来设置最大深度级别
npm list --depth=[depth]
请注意,您只能查看已在全局或本地安装到 NPM 项目的依赖项的依赖项树。
【讨论】:
你的第二个只打印依赖[依赖]的包,它不打印[依赖]的依赖。 OP 还特别表示,这不是他想要的。 使用-prod
仅列出生产依赖项(而不列出 devDependencies)。
npm list 和 npm ls 都读取 node_modules 文件夹,如果不先安装依赖项,您将无法获得树。
@RetoHöhener 它以 npm ls
的名义记录。 npm list
是命令的别名之一。
使用 npm list --prod --all
我能够得到完整的树【参考方案2】:
您可以使用npm-remote-ls
模块。您可以全局安装:
npm install -g npm-remote-ls
然后调用:
npm-remote-ls bower
或者,安装npm@5.2.0
然后您可以使用npx
并避免全局安装命令 - 只需调用:
npx npm-remote-ls bower
【讨论】:
如何查看依赖于给定模块的模块? 这还需要吗?即使使用较新版本的 npm? 对于特定版本,您可以使用此语法npm-remote-ls primeng@1.0.0-beta.7
@orad: 如果是你安装的,npm ls【参考方案3】:
此站点允许您以 2D 或 3D 节点图的形式查看包树。
http://npm.anvaka.com/#/view/2d/waterline
@Avanka 的出色工作!
【讨论】:
惊人的 "npm.anvaka.com/#/view/2d/no-one-left-behind" "取决于 npm 中的每个包"。 :D 在 Mac 上崩溃 Chrome 79.0.3945.130(官方构建)(64 位)【参考方案4】:这里是不强大的官方命令:
npm view <PACKAGE> dependencies
它只打印直接依赖项,而不是整个树。
【讨论】:
必须安装包吗?.\npm view core-js dependencies
在我的机器上什么也不返回。
@duct_tape_coder 不,不必安装。 core-js
没有依赖关系。【参考方案5】:
您可以使用howfat,它还显示依赖统计信息:
npx howfat -r tree jasmine
【讨论】:
【参考方案6】:如果你想获取特定包的实际依赖路径并想知道为什么会有它,你可以简单地问yarn why <MODULE>
。
示例:
$> yarn why mime-db
yarn why v1.5.1
[1/4] Why do we have the module "mime-db"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "mime-db@1.37.0"
info Reasons this module exists
- "coveralls#request#mime-types" depends on it
- Hoisted from "coveralls#request#mime-types#mime-db"
info Disk size without dependencies: "196kB"
info Disk size with unique dependencies: "196kB"
info Disk size with transitive dependencies: "196kB"
info Number of shared dependencies: 0
Done in 0.65s.
【讨论】:
【参考方案7】:查看所有关于 npm 模块的元数据
npm view mongoose(module name)
查看模块的所有依赖
npm view mongoose dependencies
查看所有版本或版本模块
npm view mongoose version
npm view mongoose versions
查看所有关键词
npm view mongoose keywords
【讨论】:
【参考方案8】:如果你使用的是yarn,那么你可以在项目的根目录下使用yarn list
。它将为您提供所有传递依赖项的树状结构,如下所示:
├─ @ampproject/toolbox-core@2.7.4
│ ├─ cross-fetch@3.0.6
│ └─ lru-cache@6.0.0
├─ @ampproject/toolbox-optimizer@2.7.0-alpha.1
│ ├─ @ampproject/toolbox-core@^2.6.0
│ ├─ @ampproject/toolbox-runtime-version@^2.7.0-alpha.1
│ ├─ @ampproject/toolbox-script-csp@^2.5.4
│ ├─ @ampproject/toolbox-validator-rules@^2.5.4
│ ├─ abort-controller@3.0.0
│ ├─ cross-fetch@3.0.5
│ ├─ cross-fetch@3.0.5
│ │ └─ node-fetch@2.6.0
│ ├─ cssnano-preset-simple@1.2.0
│ │ ├─ caniuse-lite@^1.0.30001093
│ │ ├─ postcss@^7.0.32
│ │ └─ postcss@7.0.35
│ │ ├─ chalk@^2.4.2
│ │ ├─ source-map@^0.6.1
│ │ └─ supports-color@^6.1.0
【讨论】:
【参考方案9】:还有一个不错的网络应用程序可以在加权地图类型的视图中查看依赖关系。
例如:
https://bundlephobia.com/result?p=sanitize-html@1.19.1
【讨论】:
【参考方案10】:将其作为列表获取:
% npx npm-remote-ls --flatten dugite -d false -o false
[
'dugite@1.91.3',
'checksum@0.1.1',
'progress@2.0.3',
'mkdirp@0.5.5',
'rimraf@2.7.1',
'tar@4.4.13',
'optimist@0.3.7',
'got@9.6.0',
'minimist@1.2.5',
'chownr@1.1.4',
'glob@7.1.6',
'fs-minipass@1.2.7',
'minizlib@1.3.3',
'minipass@2.9.0',
'safe-buffer@5.2.1',
'yallist@3.1.1',
'wordwrap@0.0.3',
'@szmarczak/http-timer@1.1.2',
'cacheable-request@6.1.0',
'@sindresorhus/is@0.14.0',
'decompress-response@3.3.0',
'duplexer3@0.1.4',
'lowercase-keys@1.0.1',
'mimic-response@1.0.1',
'get-stream@4.1.0',
'to-readable-stream@1.0.0',
'p-cancelable@1.1.0',
'url-parse-lax@3.0.0',
'fs.realpath@1.0.0',
'inflight@1.0.6',
'inherits@2.0.4',
'once@1.4.0',
'path-is-absolute@1.0.1',
'minimatch@3.0.4',
'defer-to-connect@1.1.3',
'clone-response@1.0.2',
'get-stream@5.2.0',
'http-cache-semantics@4.1.0',
'lowercase-keys@2.0.0',
'responselike@1.0.2',
'keyv@3.1.0',
'pump@3.0.0',
'prepend-http@2.0.0',
'normalize-url@4.5.0',
'wrappy@1.0.2',
'brace-expansion@1.1.11',
'json-buffer@3.0.0',
'end-of-stream@1.4.4',
'concat-map@0.0.1',
'balanced-match@1.0.0'
]
【讨论】:
这个包会因大量的 deps 列表而中断(例如,尝试lighthouse
)。【参考方案11】:
不幸的是,npm 仍然无法查看未安装包的依赖关系。甚至没有 package's page 正确列出依赖项。 ?
幸运地安装了yarn:
brew install yarn
允许使用其 info 命令查看准确的依赖关系:
yarn info @angular/router@4.4.7 dependencies
yarn info @angular/router@4.4.7 peerDependencies
【讨论】:
为什么 yarn 提供了准确的方式来查看依赖,而 npm 没有提供查看依赖的方式,这可能是因为 npm 不是确定性的,而 yarn 是吗?以上是关于如何查看给定 npm 模块的依赖树?的主要内容,如果未能解决你的问题,请参考以下文章