名称: Bun包管理器 描述: Bun包管理器命令(安装、添加、移除、更新)、工作空间、锁文件、npm/yarn/pnpm迁移。用于Bun的依赖管理。
Bun包管理器
Bun的包管理器是一个显著的更快替代npm、yarn和pnpm的工具。比npm install快多达25倍。
快速开始
# 安装所有依赖
bun install
# 添加包
bun add react react-dom
bun add -D typescript @types/react
# 移除包
bun remove lodash
# 更新包
bun update
# 运行包二进制文件
bunx create-next-app
核心命令
| 命令 | 描述 |
|---|---|
bun install |
安装所有依赖 |
bun add <pkg> |
添加依赖 |
bun add -D <pkg> |
添加开发依赖 |
bun add -O <pkg> |
添加可选依赖 |
bun add --peer <pkg> |
添加对等依赖 |
bun remove <pkg> |
移除依赖 |
bun update [pkg] |
更新依赖 |
bunx <pkg> |
运行包二进制文件 |
bun pm cache rm |
清除缓存 |
安装标志
# 生产模式(无开发依赖)
bun install --production
# 冻结锁文件(CI/CD)
bun install --frozen-lockfile
bun ci # 简写
# 干运行
bun install --dry-run
# 详细/静默
bun install --verbose
bun install --silent
# 强制重新安装
bun install --force
# 全局包
bun install -g cowsay
锁文件
Bun使用bun.lock(自v1.2起为文本格式):
# 生成文本锁文件
bun install --save-text-lockfile
# 从二进制bun.lockb升级
bun install --save-text-lockfile --frozen-lockfile --lockfile-only
rm bun.lockb
工作空间(单仓库)
{
"name": "my-monorepo",
"workspaces": ["packages/*", "apps/*"]
}
在工作空间中运行命令:
# 在匹配的包中运行
bun run --filter 'pkg-*' build
# 在所有工作空间中运行
bun run --filter '*' test
# 为特定包安装
bun install --filter 'pkg-a'
生命周期脚本
Bun默认不运行来自依赖的生命周期脚本(安全考虑)。白名单信任包:
{
"trustedDependencies": ["my-trusted-package"]
}
# 跳过所有生命周期脚本
bun install --ignore-scripts
# 并发脚本
bun install --concurrent-scripts 5
覆盖和解析
强制嵌套依赖的特定版本:
{
"overrides": {
"lodash": "4.17.21"
}
}
也支持Yarn风格的解析:
{
"resolutions": {
"lodash": "4.17.21"
}
}
非npm依赖
{
"dependencies": {
"dayjs": "git+https://github.com/iamkun/dayjs.git",
"lodash": "git+ssh://github.com/lodash/lodash.git#4.17.21",
"zod": "github:colinhacks/zod",
"react": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"bun-types": "npm:@types/bun"
}
}
安装策略
提升式(单包默认)
传统的扁平node_modules:
bun install --linker hoisted
隔离式(工作空间默认)
类pnpm的严格隔离:
bun install --linker isolated
隔离防止“幽灵依赖”——包只能访问声明的依赖。
CI/CD
# GitHub Actions
- uses: oven-sh/setup-bun@v2
- run: bun ci # 冻结锁文件
平台特定
# 为不同平台安装
bun install --cpu=x64 --os=linux
常见错误
| 错误 | 原因 | 修复 |
|---|---|---|
Cannot find module |
缺少依赖 | 运行bun install |
Lockfile mismatch |
package.json更改 | 运行bun install |
Peer dependency |
缺少对等依赖 | bun add添加对等依赖 |
Lifecycle script failed |
非信任包 | 添加到trustedDependencies |
从其他包管理器迁移
从pnpm
Bun自动迁移pnpm-lock.yaml:
bun install # 自动转换为bun.lock
工作空间配置移至package.json:
{
"workspaces": {
"packages": ["apps/*", "packages/*"],
"catalog": {
"react": "^18.0.0"
}
}
}
从npm/Yarn
只需运行bun install - Bun读取package-lock.json和yarn.lock。
何时加载参考
加载references/cli-commands.md当:
- 需要完整CLI标志参考
- 使用高级选项时
加载references/workspaces.md当:
- 设置单仓库时
- 配置工作空间过滤器时
加载references/migration.md当:
- 从npm/yarn/pnpm迁移时
- 转换锁文件时