bun.lock 文件的项目中运行命令:
terminal
bun.lock 读取包列表(无需 node_modules),将其发送到 npm 安全公告端点,并打印报告。对于来自作用域注册表的包,Bun 会将其发送到该注册表。如果该注册表没有安全公告端点,Bun 会将这些包列为已跳过,并且它们不会影响退出代码。
bun audit 永远不会修改 package.json、bun.lock 或 node_modules。要应用修复,请使用 bun audit fix。
如果 Bun 未发现漏洞,命令会打印:
过滤选项
--audit-level=<low|moderate|high|critical> - 仅报告严重性达到此级别或更高的漏洞:
terminal
--prod(-p、-P、--production)- 仅审计可通过 dependencies、optionalDependencies 或 peerDependencies 访问的包:
terminal
--omit=<dev|optional|peer> - 跳过只能通过给定依赖类型访问的包。可重复使用。--omit=dev 与 --prod 相同:
terminal
--ignore <id> - 根据 GHSA ID 或数字 ID 忽略安全公告。可重复使用。(CVE ID 不在注册表数据中,因此无法匹配。)
terminal
package.json 脚本中。
--json
打印注册表返回的原始 JSON 响应,而不是格式化报告:
terminal
--audit-level 和 --ignore 只会影响退出代码。
bun audit fix
terminal
bun.lock 和 node_modules 会发生变化,但有一个例外:Bun 会将固定为确切版本的直接依赖视为 ^version。如果 Bun 找到修复版本,它会重写 package.json(或 catalog)中的固定版本。
- 被依赖方的版本范围阻止——没有安全版本符合某个依赖方声明的版本范围。如果该范围位于你自己的
package.json或 catalog 中,bun audit fix --latest可以绕过此限制。否则,请更新该依赖方或添加overrides条目。 - 没有已发布的修复版本——所有已发布的版本都存在漏洞。请替换该包,或使用打印出的
--ignore命令忽略此安全公告。 - 如果没有更高版本是安全的,但存在更低版本,Bun 会降级并将该行标记为
(downgrade)。 - 如果安全版本仍比
--minimum-release-age更新,Bun 仍会安装该版本,并将该行标记为(newer than --minimum-release-age)。 - Bun 会像升级其他包一样升级已修补的依赖(
patchedDependencies)。之后使用bun patch重新创建补丁。 - 安装后,Bun 会重新审计新的 lockfile。
remaining数量和退出代码会根据第二次审计结果确定,因此与后续运行bun audit报告的结果一致。 --dry-run会打印计划,但不进行安装。--json会打印一个描述计划和结果的 JSON 对象(fixes、blocked、unfixable、unmatched、unaudited、vulnerableAfterInstall、fixed、remaining、dryRun)。如果生命周期脚本可能会向 stdout 写入内容,请传入--ignore-scripts。- 在
bunfig.toml中配置的安全扫描器会像运行bun update一样,对即将安装的包进行扫描。 - Bun 不接受
--prod、--frozen-lockfile和--no-save,因为这些选项会阻止写入bun.lock。
bun audit fix --latest
terminal
bun audit fix 相同,但你自己的 package.json 文件和 catalog 中的版本范围不再阻止修复。Bun 会重写这些范围以接受新版本,同时保留其格式(^5.0.0 → ^6.3.1、~5.7.1 → ~6.3.1,确切版本则保持为确切版本)。第三方包声明的版本范围仍会阻止修复;对于这些情况,请使用 overrides。
退出代码
如果 Bun 应用--audit-level 和 --ignore 后没有剩余漏洞,则退出代码为 0;否则为 1。对于 bun audit fix,退出代码根据安装后的重新审计结果确定(或者在使用 --dry-run 时,根据计划确定)。
如果注册表请求失败,两个命令都会向 stderr 打印 audit request failed,并以 1 退出。