Skip to main content
随着时间推移,即使某个版本满足所有版本范围,bun.lock 中仍可能积累同一软件包的多个版本。例如,当版本范围为 ^0.15.7 和 ^0.15.8 时,文件中可能同时包含 [email protected] 和 [email protected]。bun dedupe 会将它们合并为最少数量的已锁定版本(优先选择较新的版本),保存 bun.lock 并执行安装。
terminal
每一行显示的是 Bun 移除的版本以及其依赖项现在使用的版本。 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 条目。