Skip to main content

yarn dedupe

删除重叠范围的重复依赖。

用法

$ yarn dedupe ...

示例

对所有包进行数据去重 :

yarn dedupe

使用特定策略对所有包进行数据去重 :

yarn dedupe --strategy highest

对特定包进行数据去重 :

yarn dedupe lodash

对具有 @babel/* 范围的所有包进行数据去重 :

yarn dedupe @babel/*

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

yarn dedupe --check

详情

重复项被定义为具有重叠范围的描述符,这些描述符被解析并锁定到不同的定位器。它们是 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

选项

定义描述

-s,--strategy #0

删除重复依赖时使用的策略

-c,--check

发现重复项时以退出代码 1 退出,而不保留依赖树

--json

将输出格式化为 NDJSON 流

--mode #0

更改安装生成的工件