bun update
将依赖项更新到其版本范围允许的最新版本
bun update(别名 bun up)会将每个直接和传递依赖更新到其请求范围允许的最新版本。随后,它会重写 package.json 和 bun.lock。若要忽略已声明的范围,请使用 --latest。
bun update
要更新特定的软件包,请传入其名称。名称可以是 glob 模式,! 用于排除:
bun update zod
bun update jquery@3 # move the package.json entry to the newest 3.x
bun update '@types/*'
bun update '@babel/*' '!@babel/core'
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。Bun 会保留运算符。使用install.exact或--exact时,Bun 会写入精确版本。- 精确锁定版本、dist-tag(
"latest"、"next")和其他范围形式(*、1.x、>=1.0.0)会保持原样;只有bun.lock会更新。--latest会重写它们。 - Bun 从不重写
catalog:引用;它会改为更新根目录package.json中的 catalog 条目。 --no-save只会更新node_modules,而不更改package.json和bun.lock。
哪些内容会被保留
- Bun 从不扩大范围。依赖
foo@^1.0.0的软件包永远不会获得foo@2.x。 patchedDependencies中的版本只要仍在其范围内,就会保持不变。Bun 会将它们报告为kept name@version (patched, v1.2.3 available)。--latest和bun audit fix会更新它们;之后请使用bun patch重新创建补丁。- 如果针对某个传递依赖的软件包的注册表请求失败,该软件包会保留其锁定版本,Bun 会打印警告。针对直接依赖的请求失败则会报错。
--interactive
使用 --interactive 标志选择要更新的软件包:
bun update --interactive
bun update -i
--interactive 会打开一个终端界面,列出所有过时的直接依赖。Bun 会更新你选中的软件包,效果等同于运行 bun update <name> ...;其他软件包都会保留其锁定版本。
交互界面
界面显示按依赖类型分组的软件包:
? Select packages to update - Space to toggle, Enter to confirm, a to select all, n to select none, i to invert, l to toggle latest
dependencies Current Target Latest
□ react 17.0.2 18.2.0 18.3.1
□ lodash 4.17.20 4.17.21 4.17.21
devDependencies Current Target Latest
□ typescript 4.8.0 5.0.0 5.3.3
□ @types/node 16.11.7 18.0.0 20.11.5
optionalDependencies Current Target Latest
□ some-optional-package 1.0.0 1.1.0 1.2.0
分组说明:
- 软件包按节标题分组:
dependencies、devDependencies、peerDependencies、optionalDependencies - 每组显示与软件包数据对齐的列标题
列说明:
- 软件包:软件包名称(可能带有诸如
dev、peer或optional的后缀) - 当前版本:当前已安装的版本
- 目标版本:将要安装的版本(遵循 semver 约束)
- 最新版本:最新可用版本
键盘操作
选择操作:
- 空格:切换软件包的选择状态
- 回车:确认选择并更新
- a/A:全选所有软件包
- n/N:全不选
- i/I:反选
导航操作:
- ↑/↓ 方向键 或 j/k:移动光标
- l/L:切换当前软件包的目标版本和最新版本显示
退出:
- Ctrl+C 或 Ctrl+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一样,Bun 之后只会链接选中的工作区。
两者都可以与软件包名称、--latest、--dry-run 和 --interactive 结合使用(后者会添加一个“工作区”列)。
bun update --recursive
bun update --filter './packages/*'
bun update -i -r
bun update zod -r
bun update zod --filter '...^ui'
--dev、--prod、--no-optional
限制 Bun 要更新的 package.json 条目:
--dev(-D)只更新devDependencies。--prod(-P)只更新dependencies和optionalDependencies。--no-optional跳过optionalDependencies。
它们可以与名称、模式、--latest 和 --interactive 结合使用。
这些标志只会选择要更新的内容——bun update --prod 仍会安装 devDependencies。
bun update --dev
bun update --prod --latest
bun update -D '@types/*'
bun update -i --prod
--global
bun update -g 会更新通过 bun add -g 安装的软件包:
bun update -g
bun update -g typescript
--latest
默认情况下,bun update 会将每个依赖项更新到满足 package.json 中版本范围的最新版本。
若要不受已声明范围限制、将直接依赖更新到最新版本,请使用 --latest(-L)。Bun 会将 package.json 条目重写为新版本的同类范围。传递依赖仍会遵循其依赖项声明的范围。Bun 不会降级已高于 latest 的依赖项(例如,预发布版本)。
bun update --latest
bun update -L
在交互模式下,按 l 可在软件包的目标版本(遵循 semver)和最新版本之间切换。
例如,以下 package.json:
{
"dependencies": {
"react": "^17.0.2"
}
}
bun update会升级到匹配17.x的版本。bun update --latest会升级到匹配18.x或更高版本。
CLI 用法
bun update [<name>[@<version>] | <pattern>]...
bun up
更新策略
--forceboolean始终从注册表请求最新版本并重新安装所有依赖。别名: -f
--latestboolean将软件包更新到最新版本。别名: -L
依赖范围
--devboolean仅更新 devDependencies。别名: -D
--prodboolean仅更新 dependencies 和 optionalDependencies。别名: -P、
--production
--no-optionalboolean不更新 optionalDependencies
--globalboolean全局安装。别名: -g
--omitstring从安装中排除 dev、optional 或 peer 依赖
项目文件管理
--yarnboolean写入 yarn.lock 文件(yarn v1)。别名: -y
--no-saveboolean不更新 package.json 或保存锁文件
--savebooleandefault true保存到 package.json(默认启用)
--frozen-lockfileboolean禁止修改锁文件
--save-text-lockfileboolean保存基于文本的锁文件
--lockfile-onlyboolean仅生成锁文件,不安装依赖
网络与注册表
--castring提供证书颁发机构(CA)签发证书
--cafilestring与 --ca 相同,但作为证书的文件路径
--registrystring默认使用指定注册表,覆盖 .npmrc、bunfig.toml 和环境变量设置
--network-concurrencynumberdefault 48最大并发网络请求数(默认 48)
缓存
--cache-dirstring从指定目录路径存储及加载缓存数据
--no-cacheboolean完全忽略清单缓存
输出与日志
--silentboolean不输出任何日志
--verboseboolean过度详细的日志输出
--no-progressboolean禁用进度条
--no-summaryboolean不打印摘要信息
脚本执行
--ignore-scriptsboolean跳过所有软件包的生命周期脚本,包括项目的 package.json 和受信任的依赖项
--concurrent-scriptsnumber生命周期脚本的最大并发任务数(默认值:CPU 核心数的 2 倍)
安装控制
--no-verifyboolean跳过校验新下载包的完整性
--trustboolean添加到项目 package.json 的 trustedDependencies 并安装包
--backendstring用于安装依赖项的平台特定优化。可能的值:clonefile(macOS 上的默认值)、hardlink(Linux 和 Windows 上的默认值)、symlink、copyfile
常规与环境
--configstring指定配置文件路径(bunfig.toml)。别名: -c
--dry-runboolean解析更新,但不安装软件包、不更新 package.json 或保存锁文件(项目自身的生命周期脚本仍会运行)
--cwdstring设置特定的当前工作目录
--helpboolean打印此帮助菜单。别名: -h