mcpField
B
bun-package-manager

bun-package-manager

github.com/secondsky开发240448 次安装5 周前更新
代码仓库

关于 bun-package-manager

bun-package-manager 是一项使用 Bun 管理 JavaScript 依赖和工作区的技能,涵盖安装、包操作、锁文件、安全设置及从其他包管理器迁移。

主要功能

  1. 01安装、添加、移除和更新包
  2. 02管理工作区与筛选器
  3. 03配置锁文件和安装模式
  4. 04控制依赖生命周期脚本
  5. 05迁移 npm、Yarn 和 pnpm 项目

适用场景

  1. 01安装项目依赖
  2. 02在单体仓库工作区运行命令
  3. 03配置 CI 中的依赖安装
  4. 04迁移现有包管理器配置

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/secondsky/claude-skills --skill bun-package-manager

安装后在 Claude Code 中输入/bun-package-manager确认已加载。

附带文件references/cli-commands.md

详细介绍

Bun 包管理器

Bun 的包管理器是 npm、yarn 和 pnpm 的大幅提速替代品。速度最高可比 npm install 快 25 倍。

快速开始

# Install all dependencies
bun install

# Add packages
bun add react react-dom
bun add -D typescript @types/react

# Remove packages
bun remove lodash

# Update packages
bun update

# Run package binaries
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清除缓存

安装标志

# Production mode (no devDependencies)
bun install --production

# Frozen lockfile (CI/CD)
bun install --frozen-lockfile
bun ci  # shorthand

# Dry run
bun install --dry-run

# Verbose/Silent
bun install --verbose
bun install --silent

# Force reinstall
bun install --force

# Global packages
bun install -g cowsay

锁文件

Bun 使用 bun.lock(自 v1.2 起采用纯文本格式):

# Generate text lockfile
bun install --save-text-lockfile

# Upgrade from binary bun.lockb
bun install --save-text-lockfile --frozen-lockfile --lockfile-only
rm bun.lockb

工作区(单仓库)

{
  "name": "my-monorepo",
  "workspaces": ["packages/*", "apps/*"]
}

在各工作区中运行命令:

# Run in matching packages
bun run --filter 'pkg-*' build

# Run in all workspaces
bun run --filter '*' test

# Install for specific packages
bun install --filter 'pkg-a'

生命周期脚本

出于安全考虑,Bun 默认不会运行依赖项中的生命周期脚本。将可信软件包加入白名单:

{
  "trustedDependencies": ["my-trusted-package"]
}
# Skip all lifecycle scripts
bun install --ignore-scripts

# Concurrent 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"
  }
}

安装策略

Bun 1.3+ 默认行为变更:从 Bun 1.3 开始,工作区默认使用 isolated(软件包无法再通过提升到根目录的 node_modules 访问未声明的依赖项)。hoisted 现在是旧版退出选项——仅当工作区软件包依赖于自身未声明的传递依赖项时才使用。

Hoisted(旧版退出选项;仍是单个非工作区软件包的默认值)

传统的扁平 node_modules:

bun install --linker hoisted
Isolated(Bun 1.3+ 工作区的默认值)

类似 pnpm 的严格隔离:

bun install --linker isolated

Isolated 可防止“幽灵依赖”——软件包只能访问已声明的依赖项。若要明确启用此策略,或在选择退出后恢复该策略,可在 bunfig.toml 中设置:

[install]
linker = "isolated"   # default for workspaces in Bun 1.3+
# linker = "hoisted"  # legacy opt-out

CI/CD

# GitHub Actions
- uses: oven-sh/setup-bun@v2
- run: bun ci  # frozen lockfile

特定平台

# Install for different platform
bun install --cpu=x64 --os=linux

安全安装

安装软件包时,请遵循供应链安全最佳实践:

  • 阻止安装后脚本——Bun 默认会禁用这些脚本;可通过 package.json 中的 trustedDependencies 允许特定软件包
  • 冷却期——在 bunfig.toml 中配置 minimumReleaseAge,等待 7 天后再安装新版本
  • 安装前审计——运行 socket package score npm <pkg>,或使用 socket npm install <pkg>,在软件包进入项目之前进行检查

加载 dependency-upgrade 技能,了解完整的安全配置,包括 Socket CLI 集成、冷却期设置、锁文件验证和 CI 强制执行。

常见错误

错误原因修复方法
Cannot find module缺少依赖项运行 bun install
Lockfile mismatchpackage.json 已更改运行 bun install
Peer dependency缺少对等依赖项使用 bun add 添加对等依赖项
Lifecycle script failed软件包不受信任将其添加到 trustedDependencies

从其他包管理器迁移

从 pnpm 迁移

Bun 会自动迁移 pnpm-lock.yaml:

bun install  # Auto-converts to 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 迁移
  • 转换锁文件

评论

支持 Markdown