yarn dedupe
用法
$ yarn dedupe ...
示例
对所有包进行数据去重 :
yarn dedupe
使用特定策略对所有包进行数据去重 :
对特定包进行数据去重 :
对具有 @babel/*
范围的所有包进行数据去重
:
检查重复项(可用作 CI 步骤) :
详情
重复项被定义为具有重叠范围的描述符,这些描述符被解析并锁定到不同的定位器。它们是 Yarn
确定性安装的自然结果,但它们有时会堆积起来,不必要地增加项目的大小。此命令使用不同的策略对当前项目中的依赖进行数据去重(目前仅实现了一种策略): -
升级,而不能降级。它还保证对整个依赖树进行数据去重只需一次。**注意:**即使它永远不会产生错误的依赖树,也应谨慎使用此命令,因为它会修改依赖树,当包不严格遵循
semver 建议时,这有时会导致问题。因此,建议手动检查更改。如果设置,-c,--check
标志将仅报告找到的重复项,而不会保留修改后的依赖树。如果发现更改,命令将以非零退出代码退出,使其适合 CI 目的。如果设置了 --mode=<mode>
选项,Yarn 将更改生成的工件。当前支持的模式为:- skip-build
根本不会运行构建脚本。请注意,这与将 enableScripts
设置为
false 不同,因为后者将禁用构建脚本,从而影响磁盘上生成的工件的内容,而前者只会禁用构建步骤 - 但不会禁用脚本本身,因为脚本本身不会运行。-
update-lockfile
将完全跳过链接步骤,只获取锁定文件中缺少的包(或没有相关校验和的包)。此模式通常由 Renovate 或
Dependabot 等工具使用,以使锁定文件保持最新,而无需承担完整的安装成本。此命令接受 glob 模式作为参数(如果有效标识并受
micromatch 支持)。确保转义模式,以防止你自己的 shell
尝试扩展它们。 ### 深入解释:Yarn
默认不会对依赖进行数据去重,否则安装将无法确定,锁文件也将毫无用处。它实际上所做的是,它首先尝试不重复依赖。示例:如果
foo@^2.3.4
(依赖的依赖)已经解析为 foo@2.3.4
,则运行 yarn add foo@*
将导致 Yarn 重用
foo@2.3.4
,即使最新的 foo
实际上是 foo@2.10.14
,从而防止不必要的重复。当 Yarn
无法解锁已锁定在锁文件中的依赖时,就会发生重复。示例:如果 foo@^2.3.4
(依赖的依赖)已经解析为 foo@2.3.4
,则运行 yarn add foo@2.10.14
将导致 Yarn 安装 foo@2.10.14
,因为现有解析不满足范围
2.10.14
。这种行为可能会导致(有时)不必要的重复,因为现在锁文件包含 2 个 foo
描述符的 2
个独立解析,即使它们具有重叠范围,这意味着可以简化锁文件,以便两个描述符都解析为 foo@2.10.14
。
选项
定义 | 描述 |
---|---|
| 删除重复依赖时使用的策略 |
| 发现重复项时以退出代码 1 退出,而不保留依赖树 |
| 将输出格式化为 NDJSON 流 |
| 更改安装生成的工件 |