跳至主要内容

yarn dedupe

对具有重叠范围的依赖项进行重复数据删除。

用法

$ yarn dedupe ...

示例

重复数据删除所有包

yarn dedupe

使用特定策略重复数据删除所有包

yarn dedupe --strategy highest

重复数据删除特定包

yarn dedupe lodash

使用 @babel/* 范围对所有包进行重复数据删除

yarn dedupe @babel/*

检查重复项(可用作 CI 步骤)

yarn dedupe --check

详细信息

重复项定义为范围重叠且已解析并锁定到不同定位符的描述符。它们是 Yarn 确定性安装的自然结果,但有时它们会堆积起来并无故增加项目的规模。

此命令使用不同的策略对当前项目中的依赖项进行重复数据删除(目前仅实现了一个策略)

  • highest:尽可能重新使用具有最高版本的定位符。这意味着依赖项只能升级,不能降级。它还保证只需要一次遍历即可对整个依赖项树进行重复数据删除。

注意:即使它永远不会产生错误的依赖项树,也应谨慎使用此命令,因为它会修改依赖项树,当包不严格遵循 semver 建议时,有时会导致问题。因此,建议手动查看更改。

如果设置了 -c,--check 标志,它将只报告找到的重复项,而不会保留修改后的依赖项树。如果找到更改,该命令将退出并显示非零退出代码,使其适合于 CI 用途。

如果设置了 --mode=<mode> 选项,Yarn 将更改生成哪些工件。当前支持的模式为

  • skip-build 根本不会运行构建脚本。请注意,这不同于将 enableScripts 设置为 false,因为后者会禁用构建脚本,从而影响磁盘上生成的工件的内容,而前者只会禁用构建步骤 - 但不会禁用脚本本身,只是不会运行脚本。

  • update-lockfile 将完全跳过链接步骤,并且只获取从锁定文件中缺失的包(或没有关联校验和的包)。此模式通常由 Renovate 或 Dependabot 等工具使用,以保持锁定文件是最新的,而无需承担全部安装成本。

此命令接受 glob 模式作为参数(如果有效 Ident 并且受 micromatch 支持)。请务必转义模式,以防止您自己的 shell 尝试扩展它们。

深入解释:

默认情况下,Yarn 不会对依赖项进行去重,否则安装将不会确定,锁定文件将毫无用处。它实际做的是首先尝试不重复依赖项。

示例:如果 foo@^2.3.4(依赖项的依赖项)已解析为 [email protected],则运行 yarn add foo@* 将导致 Yarn 重用 [email protected],即使最新的 foo 实际上是 [email protected],从而防止不必要的重复。

当 Yarn 无法解锁锁定文件中已锁定的依赖项时,就会发生重复。

示例:如果 foo@^2.3.4(依赖项的依赖项)已解析为 [email protected],则运行 yarn add [email protected] 将导致 Yarn 安装 [email protected],因为现有的解析不满足范围 2.10.14。此行为有时会导致不必要的重复,因为现在锁定文件包含 2 个 foo 描述符的 2 个单独解析,即使它们有重叠范围,这意味着可以简化锁定文件,以便两个描述符都解析为 [email protected]

选项

定义说明

-s,--strategy #0

在对依赖项进行去重时使用的策略

-c,--check

在找到重复项时退出,退出代码为 1,而不保留依赖项树

--json

将输出格式化为 NDJSON 流

--mode #0

更改安装生成的内容