Skip to main content
要升级 Bun CLI 版本,请参阅 bun upgrade
bun update(别名 bun up)会将每个依赖项——直接依赖和传递依赖——更新到其请求版本范围所允许的最新版本,然后重写 package.jsonbun.lock。要忽略已声明的版本范围,请使用 --latest
terminal
要更新特定的软件包,请传入其名称。名称可以是 glob 模式,! 用于排除:
terminal
bun update <package> 会更新 <package>bun.lock 中出现的所有位置,并保持其他内容不变。这同样适用于传递依赖——bun update caniuse-lite 会获取嵌套依赖中的修复,而不会将其添加到 package.json。不在 bun.lock 中的名称会导致错误。 更新的软件包会在安装摘要中显示为 ↑ name old → new,当更新范围之外存在更新的主版本时,会显示 (v3.0.0 available)。使用 --dry-run 可预览更新。

package.json 如何被重写

  • ^1.1.0^1.2.0~1.1.0~1.1.5。运算符会被保留。使用 install.exact--exact 时,则会写入精确版本。
  • 精确固定版本、dist-tags("latest""next")以及其他版本范围形式(*1.x>=1.0.0)会按原样保留;只有 bun.lock 会发生变化。--latest 会重写这些内容。
  • catalog: 引用永远不会被重写;根目录 package.json 中的 catalog 条目会被更新。
  • --no-save 只更新 node_modules,不会修改 package.jsonbun.lock

哪些内容会被保留

  • 版本范围永远不会扩大。依赖 foo@^1.0.0 的软件包永远不会获得 [email protected]
  • 只要版本范围允许,patchedDependencies 中的版本就会保持不变,并显示为 kept name@version (patched, v1.2.3 available)--latestbun audit fix 会更新这些版本;之后请使用 bun patch 重新创建补丁。
  • 如果传递依赖的软件包注册表请求失败,该软件包会保留其锁定版本,并打印警告。直接依赖的请求失败则会导致错误。

--interactive

使用 --interactive 标志选择要更新的软件包:
terminal
这会打开一个终端界面,列出每个过时的直接依赖。你选择的软件包会按照运行 bun update <name> ... 的方式进行更新;其他所有内容都会保留其锁定版本。

交互界面

界面显示按依赖类型分组的包:
分组说明:
  • 包按节标题分组:dependenciesdevDependenciespeerDependenciesoptionalDependencies
  • 每组显示与包数据对齐的列标题
列说明:
  • Package:包名称(可能带有诸如 dev peer optional 的后缀)
  • Current:当前已安装的版本
  • Target:将要安装的版本(遵循 semver 约束)
  • Latest:最新可用版本

键盘操作

选择操作:
  • 空格:切换包的选择状态
  • 回车:确认选择并更新
  • a/A:全选所有包
  • n/N:全不选
  • i/I:反选
导航操作:
  • ↑/↓ 方向键j/k:移动光标
  • l/L:切换当前包的目标版本和最新版本显示
退出:
  • Ctrl+CCtrl+D:取消且不更新

视觉指示

  • 已选中的包(将被更新)
  • 未选中的包
  • 当前光标位置
  • 颜色:红色(主版本)、黄色(次版本)、绿色(补丁版本)变更
  • 下划线:当前选中的更新目标

包分组

包根据依赖类型组织分组:
  • dependencies - 常规运行时依赖
  • devDependencies - 开发依赖
  • peerDependencies - 同级依赖
  • optionalDependencies - 可选依赖
在每个分组中,单个包可能带有后缀( dev peer optional)。

--recursive--filter

在 monorepo 中,bun update 只会重写你运行命令所在工作区的 package.json(从根目录运行时,每个工作区的传递依赖仍会在 bun.lock 中更新)。
  • --recursive-r)会更新每个工作区的 package.json
  • --filter <pattern>-F)使用筛选语法,仅更新匹配的工作区。与 bun install --filter 一样,之后只会链接所选工作区。
两者都可以与软件包名称、--latest--dry-run--interactive 结合使用(后者会添加一个 “Workspace” 列)。
terminal

--dev--prod--no-optional

限制要更新的 package.json 条目:--dev-D)仅更新 devDependencies--prod-P)仅更新 dependenciesoptionalDependencies--no-optional 跳过 optionalDependencies。它们可以与名称、模式、--latest--interactive 结合使用。 这些标志只会选择要更新的内容——bun update --prod 仍会安装 devDependencies
terminal

--global

bun update -g 会更新通过 bun add -g 安装的软件包:
terminal

--latest

默认情况下,bun update 会将每个依赖项更新到满足 package.json 中版本范围的最新版本。 要将直接依赖更新到最新版本而不考虑已声明的版本范围,请使用 --latest-L)。package.json 条目会以新版本为基础,重写为相同样式的版本范围。传递依赖仍会遵循其依赖方声明的版本范围,并且已经领先于 latest 的依赖(例如预发布版本)不会降级。
terminal
在交互模式下,按 l 可在软件包的目标版本(遵循 semver)和最新版本之间切换。 例如,以下 package.json
package.json
  • bun update 会升级到匹配 17.x 的版本。
  • bun update --latest 会升级到匹配 18.x 或更高版本。

CLI 用法

terminal

更新策略

boolean
始终从注册表请求最新版本并重新安装所有依赖。别名: -f
boolean
将软件包更新到最新版本。别名: -L

依赖范围

boolean
仅更新 devDependencies。别名: -D
boolean
仅更新 dependenciesoptionalDependencies。别名: -P —production
boolean
不更新 optionalDependencies
boolean
全局安装。别名: -g
string
从安装中排除 devoptionalpeer 依赖

项目文件管理

boolean
写入 yarn.lock 文件(yarn v1)。别名: -y
boolean
不更新 package.json 或保存锁文件
boolean
default:"true"
保存到 package.json(默认启用)
boolean
禁止修改锁文件
boolean
保存基于文本的锁文件
boolean
仅生成锁文件,不安装依赖

网络与注册表

string
提供证书颁发机构(CA)签发证书
string
—ca 相同,但作为证书的文件路径
string
默认使用指定注册表,覆盖 .npmrcbunfig.toml 和环境变量设置
number
default:"48"
最大并发网络请求数(默认 48)

缓存

string
从指定目录路径存储及加载缓存数据
boolean
完全忽略清单缓存

输出与日志

boolean
不输出任何日志
boolean
过度详细的日志输出
boolean
禁用进度条
boolean
不打印摘要信息

脚本执行

boolean
跳过项目 package.json 中的生命周期脚本(依赖脚本永远不会执行)
number
生命周期脚本的最大并发任务数(默认值:CPU 核心数的 2 倍)

安装控制

boolean
跳过校验新下载包的完整性
boolean
添加到项目 package.jsontrustedDependencies 并安装包
string
default:"clonefile"
安装依赖的特定平台优化。可选值:clonefile(默认)、hardlinksymlinkcopyfile

常规与环境

string
指定配置文件路径(bunfig.toml)。别名: -c
boolean
不安装任何内容
string
设置特定的当前工作目录
boolean
打印此帮助菜单。别名: -h