自动化与脚本
已采用或要迁移到 Bun 时:管理依赖、锁文件、工作区…
在采用 Bun 的项目中,用它替代 npm/yarn/pnpm 完成依赖安装、增删更新、锁文件迁移、monorepo 工作区和 CI 冻结安装。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
已采用或要迁移到 Bun 时:管理依赖、特定
解决思路
- 安装全部依赖:`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>`
- 核心命令:添加 peer 依赖用 `bun add --peer <pkg>`
- 核心命令:移除依赖用 `bun remove <pkg>`
- 核心命令:更新依赖用 `bun update [pkg]`
- 核心命令:运行包二进制用 `bunx <pkg>`
- 核心命令:清空缓存用 `bun pm cache rm`
- 生产模式安装,不装 devDependencies:`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 自 v1.2 起使用文本锁文件 `bun.lock`
- 生成文本锁文件:`bun install --save-text-lockfile`
- 从二进制 `bun.lockb` 升级:`bun install --save-text-lockfile --frozen-lockfile --lockfile-only`
- 删除旧二进制锁文件:`rm bun.lockb`
- 在 `package.json` 配置工作区:`{"name":"my-monorepo","workspaces":["packages/*","apps/*"]}`
- 在匹配包中运行命令:`bun run --filter 'pkg-*' build`
- 在所有工作区中运行命令:`bun run --filter '*' test`
- 为指定包安装:`bun install --filter 'pkg-a'`
- Bun 默认不运行依赖的生命周期脚本(安全考虑)
- 白名单可信包:在 `package.json` 设置 `{"trustedDependencies":["my-trusted-package"]}`
- 跳过所有生命周期脚本:`bun install --ignore-scripts`
- 并发执行脚本:`bun install --concurrent-scripts 5`
- 用 `overrides` 强制嵌套依赖版本:`{"overrides":{"lodash":"4.17.21"}}`
- 也支持 Yarn 风格 `resolutions`:`{"resolutions":{"lodash":"4.17.21"}}`
- 非 npm 依赖示例:Git HTTPS 依赖 `dayjs: "git+https://github.com/iamkun/dayjs.git"`
- 非 npm 依赖示例:Git SSH 依赖 `lodash: "git+ssh://github.com/lodash/lodash.git#4.17.21"`
- 非 npm 依赖示例:GitHub 简写依赖 `zod: "github:colinhacks/zod"`
- 非 npm 依赖示例:tarball URL 依赖 `react: "https://registry.npmjs.org/react/-/react-18.2.0.tgz"`
- 非 npm 依赖示例:npm 别名 `bun-types: "npm:@types/bun"`
- Bun 1.3+ 起,工作区默认 `isolated`;包不能再通过 hoisted 根 `node_modules` 访问未声明依赖;`hoisted` 是遗留 opt-out,仅当工作区包依赖未声明的传递依赖时使用
- 使用传统扁平 `node_modules`:`bun install --linker hoisted`
- 使用 pnpm 式严格隔离:`bun install --linker isolated`
- `isolated` 防止 phantom dependencies,包只能访问已声明依赖
- 在 `bunfig.toml` 显式设置或恢复策略:`[install] linker = "isolated"`(Bun 1.3+ 工作区默认);可改为 `linker = "hoisted"` 作为遗留 opt-out
- GitHub Actions 使用 `oven-sh/setup-bun@v2`
- 然后在 CI 中运行 `bun ci`(冻结锁文件)
- 为不同平台安装:`bun install --cpu=x64 --os=linux`
- 安全安装:阻止 post-install 脚本,Bun 默认禁用;通过 `package.json` 的 `trustedDependencies` 允许特定包
- 安全安装:设置冷却期,在 `bunfig.toml` 配置 `minimumReleaseAge` 等待新版本 7 天
- 安全安装:安装前审计,运行 `socket package score npm <pkg>` 或 `socket npm install <pkg>` 检查包
- 需要完整安全配置(Socket CLI 集成、冷却设置、锁文件校验、CI 强制)时加载 `dependency-upgrade` skill
- 常见错误 `Cannot find module`:缺少依赖,运行 `bun install`
- 常见错误 `Lockfile mismatch`:`package.json` 已变,运行 `bun install`
- 常见错误 `Peer dependency`:缺少 peer,运行 `bun add` 安装该 peer
- 常见错误 `Lifecycle script failed`:不可信包,加入 `trustedDependencies`
- 从 pnpm 迁移:运行 `bun install`,自动把 `pnpm-lock.yaml` 转换为 `bun.lock`
- pnpm 工作区配置迁移到 `package.json`:`{"workspaces":{"packages":["apps/*","packages/*"],"catalog":{"react":"^18.0.0"}}}`
- 从 npm/Yarn 迁移:直接运行 `bun install`,Bun 会读取 `package-lock.json` 和 `yarn.lock`
- 需要完整 CLI flag 参考时加载 `references/cli-commands.md`
- 设置 monorepo 或配置工作区过滤器时加载 `references/workspaces.md`
- 从 npm/yarn/pnpm 迁移或转换锁文件时加载 `references/migration.md`
适用边界 · 注意事项
- 未安装 Bun 或环境不允许安装 Bun 时不适用。
- 必须保持 npm/yarn/pnpm 的锁文件、工作区语义或生命周期脚本行为且未完成迁移验证时不适用。
- 依赖包必须默认自动执行 post-install 脚本且无法加入 trustedDependencies 白名单时,不应直接使用默认 Bun 安装流程。