bun.lock 中仍可能积累同一软件包的多个版本。例如,当版本范围为 ^0.15.7 和 ^0.15.8 时,文件中可能同时包含 [email protected] 和 [email protected]。bun dedupe 会将它们合并为最少数量的已锁定版本(优先选择较新的版本),保存 bun.lock 并执行安装。
terminal
bun dedupe 只会在 lockfile 中已有的版本之间进行选择,绝不会修改 package.json。它绝不会从 registry 获取新版本,也绝不会将依赖项移出其版本范围。如需执行这些操作,请使用 bun update。
--check 和 --dry-run
--check 会报告 Bun 将移除的内容,但不会进行任何更改;如果存在重复版本,则以 1 退出。可在 CI 中使用:
terminal
--dry-run 会打印相同的输出,但始终以 0 退出
--lockfile-only 会重写 bun.lock,但不会执行安装
注意事项
- Bun 会遵循 overrides 和 catalogs。它会根据每个依赖项的有效版本范围重新指向对应版本。
- 如果这是移除重复版本的唯一方法,Bun 可能会将直接依赖项切换到一个_更旧的_已锁定版本(例如,某个传递依赖项将其版本固定为一个确切版本)。如果希望优先选择较新的版本,请使用
bun update或 override。 - Bun 绝不会移除
patchedDependencies中的版本。如果因此必须保留另一个版本,Bun 会打印一行kept …,解释原因。 - 依赖于 dist-tag、git URL 或 tarball 的依赖项会保留其解析后的版本。
- 需要 lockfile 与
package.json相匹配。如果自上次安装以来依赖项发生了更改,命令会以bun.lock does not match package.json退出。请先运行bun install。Bun 会自动迁移package-lock.json、yarn.lock或pnpm-lock.yaml。 - 不能与
--frozen-lockfile、--production或--no-save一起使用;请改用--check。 - 使用 isolated linker 时,仅因 peer dependencies 不同而产生的同一版本多个副本不算重复版本,Bun 也不会报告这些副本。
bun prune会清理过时的 store 条目。