bun install:如何快30倍安装依赖?Bun包管理器完全指南(Workspaces、Lockfile与安全审计)
【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun
bun install是 Bun 内置的包管理器命令,官方基准测试显示它比npm install快最高 30 倍——在任意 Node.js 项目中,只要有package.json,就可以直接用它替代 npm、yarn 或 pnpm 安装依赖。这篇指南面向新手,用最少代码讲清楚三件核心事:Workspaces 单体仓库管理、bun.lock 锁文件最佳实践、以及 bun audit 安全审计,帮你把依赖安装从"等十分钟"变成"等三秒"。
三步上手:bun install 快速安装教程
不需要卸载 npm,bun install 是 Node.js 项目的直接"平替":
bun install react # 安装指定包 bun install react@19.1.1 # 安装指定版本 bun install # 安装 package.json 中全部依赖一条命令会做三件事(见 docs/pm/cli/install.mdx):
- 安装
dependencies、devDependencies、optionalDependencies,并默认自动装peerDependencies(npm 7 以前最容易踩的坑); - 运行你项目的
preinstall/postinstall脚本,但出于安全考虑,不会运行第三方依赖的任意生命周期脚本; - 写入
bun.lock锁文件到项目根目录。
生产环境部署时用bun install --production,只装生产依赖、跳过 devDependencies。
为什么快30倍?三大核心秘密
官方文档给出数据:Bun 安装一个大型 monorepo(Remix 项目)在 Linux 上约500ms,比npm install快 28 倍、比yarn快 12 倍、比pnpm快 8 倍(见 docs/pm/workspaces.mdx)。快的原因并不神秘:
- 全局缓存 + 零拷贝。所有 npm 包缓存到
~/.bun/install/cache/,多个项目复用同一个包时不重复下载; - 平台最优后端。macOS 用
clonefile、Linux/Windows 用hardlink硬链接,直接把缓存文件"链接"进node_modules,而非逐字节复制(详见 docs/pm/cli/install.mdx); - 并行原生实现。安装核心用 Rust 编写并高度并行化,tarball 解压、依赖解析同时进行。
想强制指定后端:bun install --backend hardlink。
Workspaces 完整指南:Monorepo 依赖管理
bun install 完整支持package.json的"workspaces"字段(文档:docs/pm/workspaces.mdx)。典型单体仓库结构:
<root> ├── bun.lock ├── package.json # "workspaces": ["packages/*"] └── packages ├── pkg-a/ └── pkg-b/ # 依赖 pkg-a,用 "workspace:*" 声明Workspaces 三大好处:
- 本地互引不下载:
b依赖a时,Bun 直接把本地packages/a链进node_modules; - 自动去重提升(hoisting):多个 workspace 共享的依赖提升到根
node_modules,省磁盘、避免"依赖地狱"; --filter精准安装:只给部分包装依赖,或并行跑多包脚本。
# 安装除 pkg-c 外的所有 workspace 依赖 bun install --filter '!pkg-c' # 按目录筛选 bun install --filter './packages/pkg-a' # 一个命令并行启动 api 和 frontend 的 dev 脚本 bun --filter '*' dev--filter还支持依赖关系语法,如bun --filter 'web...' build会"按依赖顺序"构建 web 及其依赖的所有包,完整规则见 docs/pm/filter.mdx。
bun.lock 锁文件:可复现安装最佳实践
要不要提交 bun.lock?——要。锁文件保证团队和 CI 装到完全相同的版本。几个实用技巧(文档:docs/pm/lockfile.mdx):
| 场景 | 命令 | 说明 |
|---|---|---|
| 只生成锁文件不安装 | bun install --lockfile-only | 快速校验依赖树 |
| CI 可复现安装 | bun ci | 等价--frozen-lockfile,package.json与锁文件不一致时直接报错 |
| 离线/弱网环境 | bun install --offline | 只用全局缓存,不联网 |
| 验证锁文件不安装 | bun install --frozen-lockfile --dry-run | 上线前体检 |
迁移也几乎是零成本:Bun 检测到没有bun.lock时,会自动迁移package-lock.json、yarn.lock、pnpm-lock.yaml(pnpm 的pnpm-workspace.yaml中 catalog 配置一并迁移),原锁文件保留不动,验证后再手动删除即可。
安全审计:bun audit 一键排查漏洞
bun install 的安全设计有两层。
第一层:默认拦截危险脚本。第三方依赖的postinstall等生命周期脚本默认不执行——这是供应链攻击最常见的入口。确需放行的包,加入package.json的trustedDependencies白名单,或用bun pm trust <包名>一键信任。
第二层:漏洞审计。在项目根目录运行(文档:docs/pm/cli/audit.mdx):
bun audit # 读取 bun.lock 检查已知漏洞(无需 node_modules) bun audit --audit-level=high # 只看 high 及以上 bun audit --prod # 只查生产依赖 bun audit fix # 自动升级到安全版本并重新安装bun audit fix会输出修复报告:能修复的自动升级、被上游版本范围卡住的会明确告诉你"被谁的哪个依赖范围挡住了",建议用--latest或overrides处理。
进阶防护:在bunfig.toml里配置minimumReleaseAge(例如 259200 秒 = 3 天),拒绝安装"刚发布"的包,专治恶意包抢注窗口期攻击。
常用辅助命令速查表
日常还会用到这些bun pm工具(文档:docs/pm/cli/pm.mdx):
bun pm ls --all:列出所有已安装依赖(含传递依赖);bun why <包名>:查清"到底是谁引入了这个包";bun pm licenses:按 MIT/Apache 等许可证分组列出依赖;bun pm cache rm:清空全局包缓存;bun pm diff react:对比当前锁定版本与最新版到底改了什么。
总结:bun install 新手记忆清单
✅ 有package.json就能用,bun install直替 npm,快最高 30 倍 ✅ Monorepo 用workspaces+--filter精准安装 ✅bun.lock提交进版本库,CI 用bun ci保证可复现 ✅ 安全靠"默认不跑依赖脚本 +bun audit审计 + 最小发布年龄"三道防线
从等待十分钟到等待三秒,bun install 值得成为你依赖安装的默认选项。
【免费下载链接】bunIncredibly fast JavaScript runtime, bundler, test runner, and package manager – all in one项目地址: https://gitcode.com/GitHub_Trending/bu/bun
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考