描述

中英双语

搜索本地包树并尝试通过将依赖关系移到树上更远的位置来简化整体结构,这样它们可以更有效地被多个依赖包共享。

例如,考虑这个依赖图:

a
+-- b <-- depends on c@1.0.x
|   `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
    `-- c@1.0.10

在这种情况下,npm dedupe 会将树转换为:

a
+-- b
+-- d
`-- c@1.0.10

由于 node 模块查找的分层特性,b 和 d 都将通过树根级别的单个 c 包来满足它们的依赖关系。

在某些情况下,您可能有这样的依赖关系图:

a
+-- b <-- depends on c@1.0.x
+-- c@1.0.3
`-- d <-- depends on c@1.x
    `-- c@1.9.9

在安装过程中,bc@1.0.3 依赖项被放置在树的根目录中。尽管 c@1.0.3 可以满足 dc@1.x 的依赖,但还是使用了较新的 c@1.9.0 依赖,因为 npm 默认支持更新,即使这样做会导致重复。

运行 npm dedupe 会导致 npm 记下重复并重新评估,删除嵌套的 c 模块,因为根目录下的那个就足够了。

要在安装过程中更喜欢重复数据删除而不是新奇,请运行 npm install --prefer-dedupenpm config set prefer-dedupe true

参数被忽略。重复数据删除始终作用于整个树。

请注意,此操作会转换依赖关系树,但不会导致安装新模块。

使用 npm find-dupes 将在 --dry-run 模式下运行命令。

注意:npm dedupe 永远不会更新项目 package.json 中直接依赖项的 semver 值,如果要更新 package.json 中的值,可以运行:npm update --save 代替。