Bun 包管理器
Bun 内置了极速的包管理器,可以替代 npm、yarn、pnpm。本章介绍 Bun 包管理器的使用方法和高级特性。
为什么使用 Bun 包管理器?
速度对比
安装 React 项目依赖的时间对比:
┌────────────────────────────────────────────┐
│ npm ████████████████████████████ 30s │
│ yarn ██████████████████████ 22s │
│ pnpm ████████████████ 16s │
│ bun ██ 1.5s │
└────────────────────────────────────────────┘Bun 包管理器的优势:
- 极速安装:比 npm 快 20-30 倍
- 硬链接:节省磁盘空间
- 兼容性:完全兼容 npm 生态
- 零配置:无需额外设置
基本命令
初始化项目
bash
# 创建 package.json
bun init
# 交互式创建
bun init -y # 跳过提示,使用默认值安装依赖
bash
# 安装所有依赖(根据 package.json)
bun install
# 简写
bun i添加依赖
bash
# 添加生产依赖
bun add lodash
# 添加多个依赖
bun add react react-dom
# 添加开发依赖
bun add -d typescript @types/node
# 添加可选依赖
bun add --optional fsevents
# 添加精确版本
bun add express@4.18.2
# 添加指定版本范围
bun add "express@^4.18.0"移除依赖
bash
# 移除依赖
bun remove lodash
# 移除多个依赖
bun remove react react-dom更新依赖
bash
# 更新所有依赖
bun update
# 更新特定依赖
bun update lodash
# 查看可更新的依赖
bun outdatedpackage.json 管理
依赖类型
json
{
"dependencies": {
"express": "^4.18.0",
"lodash": "^4.17.21"
},
"devDependencies": {
"typescript": "^5.0.0",
"@types/node": "^20.0.0"
},
"peerDependencies": {
"react": "^18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.0"
}
}版本规范
| 写法 | 含义 |
|---|---|
4.18.2 | 精确版本 |
^4.18.0 | 兼容版本(4.x.x) |
~4.18.0 | 补丁版本(4.18.x) |
* | 任意版本 |
>=4.18.0 | 大于等于指定版本 |
4.18.0 - 5.0.0 | 版本范围 |
锁文件
bun.lockb
Bun 使用二进制锁文件 bun.lockb:
bash
# 查看锁文件内容(转为 yarn.lock 格式)
bun bun.lockb锁文件优势
- 更小:比 package-lock.json 小得多
- 更快:二进制格式解析更快
- 确定性:保证安装结果一致
忽略锁文件
bash
# 忽略锁文件重新安装
bun install --no-save全局包管理
安装全局包
bash
# 安装全局包
bun add --global typescript
# 简写
bun add -g typescript查看全局包
bash
# 全局包位置
ls ~/.bun/install/global移除全局包
bash
bun remove -g typescriptRegistry 配置
使用镜像源
bash
# 临时使用镜像
bun add lodash --registry https://registry.npmmirror.com配置文件
创建 bunfig.toml:
toml
[install]
# 使用国内镜像
registry = "https://registry.npmmirror.com"多 Registry 配置
toml
[install.scopes]
# @company 作用域使用私有 registry
"@company" = "https://npm.company.com"
# 其他包使用默认 registry工作空间(Monorepo)
配置工作空间
json
// package.json
{
"name": "my-monorepo",
"workspaces": [
"packages/*",
"apps/*"
]
}目录结构
my-monorepo/
├── package.json
├── packages/
│ ├── shared/
│ │ └── package.json
│ └── utils/
│ └── package.json
├── apps/
│ ├── web/
│ │ └── package.json
│ └── api/
│ └── package.json
└── bun.lockb工作空间命令
bash
# 安装所有工作空间依赖
bun install
# 在特定工作空间运行命令
bun run --filter @company/web dev
# 添加依赖到特定工作空间
bun add lodash --filter @company/web
# 工作空间间添加依赖
bun add @company/shared --filter @company/web缓存管理
缓存位置
bash
# 查看缓存目录
echo $BUN_INSTALL/install/cache清理缓存
bash
# 清理包缓存
bun pm cache rm
# 清理所有缓存
rm -rf ~/.bun/install/cache离线安装
bash
# 优先使用缓存
bun install --prefer-offline
# 完全离线安装
bun install --offline高级安装选项
安装选项
bash
# 只安装生产依赖
bun install --production
# 冻结锁文件(CI 环境推荐)
bun install --frozen-lockfile
# 不执行生命周期脚本
bun install --ignore-scripts
# 强制重新安装
bun install --force查看依赖树
bash
# 查看依赖树
bun pm ls
# 查看特定包的依赖
bun pm ls lodash
# 查看为什么安装某个包
bun pm why lodash发布包
准备发布
json
{
"name": "@username/my-package",
"version": "1.0.0",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"scripts": {
"build": "bun build src/index.ts --outdir dist",
"prepublishOnly": "bun run build"
}
}发布到 npm
bash
# 登录 npm
npm login
# 发布包
npm publish
# 发布带 scope 的包
npm publish --access public与其他包管理器对比
命令对照
| 操作 | npm | yarn | pnpm | bun |
|---|---|---|---|---|
| 安装依赖 | npm install | yarn | pnpm install | bun install |
| 添加依赖 | npm install pkg | yarn add pkg | pnpm add pkg | bun add pkg |
| 添加开发依赖 | npm install -D pkg | yarn add -D pkg | pnpm add -D pkg | bun add -d pkg |
| 移除依赖 | npm uninstall pkg | yarn remove pkg | pnpm remove pkg | bun remove pkg |
| 运行脚本 | npm run cmd | yarn cmd | pnpm cmd | bun run cmd |
| 全局安装 | npm install -g pkg | yarn global add pkg | pnpm add -g pkg | bun add -g pkg |
迁移到 Bun
从其他包管理器迁移非常简单:
bash
# 删除旧的锁文件和 node_modules
rm -rf node_modules package-lock.json yarn.lock pnpm-lock.yaml
# 使用 Bun 重新安装
bun install常见问题
安装失败
bash
# 清理后重试
rm -rf node_modules bun.lockb
bun install
# 使用详细模式查看错误
bun install --verbose版本冲突
bash
# 查看冲突原因
bun pm why conflicting-package
# 强制使用特定版本
bun add package@version --force私有包认证
toml
# bunfig.toml
[install.scopes]
"@private" = { url = "https://npm.private.com", token = "$NPM_TOKEN" }小结
本章介绍了:
- ✅ Bun 包管理器的基本命令
- ✅ 依赖管理和版本控制
- ✅ Registry 和镜像配置
- ✅ 工作空间(Monorepo)支持
- ✅ 缓存管理和离线安装
- ✅ 从其他包管理器迁移
下一步
继续阅读 模块系统 了解 Bun 对 ES 模块和 CommonJS 的支持。