Bun 工作区管理 #

概述 #

Bun 原生支持 workspaces(工作区),可以方便地管理 Monorepo 项目中的多个包。

基本配置 #

package.json 配置 #

json
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": [
    "packages/*"
  ]
}

目录结构 #

text
my-monorepo/
├── packages/
│   ├── core/
│   │   ├── package.json
│   │   ├── src/
│   │   └── tsconfig.json
│   ├── utils/
│   │   ├── package.json
│   │   └── src/
│   └── web/
│       ├── package.json
│       └── src/
├── package.json
└── bun.lockb

子包配置 #

packages/core/package.json #

json
{
  "name": "@myorg/core",
  "version": "1.0.0",
  "main": "./src/index.ts",
  "types": "./src/index.ts",
  "dependencies": {
    "typescript": "^5.0.0"
  }
}

packages/utils/package.json #

json
{
  "name": "@myorg/utils",
  "version": "1.0.0",
  "main": "./src/index.ts",
  "dependencies": {
    "@myorg/core": "workspace:*"
  }
}

packages/web/package.json #

json
{
  "name": "@myorg/web",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "dev": "bun --hot run src/index.ts",
    "build": "bun build src/index.ts --outdir dist"
  },
  "dependencies": {
    "@myorg/core": "workspace:*",
    "@myorg/utils": "workspace:*",
    "react": "^18.2.0"
  }
}

工作区协议 #

workspace 协议 #

json
{
  "dependencies": {
    "@myorg/core": "workspace:*",
    "@myorg/utils": "workspace:^"
  }
}
协议 说明
workspace:* 使用最新版本
workspace:^ 使用兼容版本
workspace:~ 使用相近版本
workspace:1.0.0 使用指定版本

安装依赖 #

安装所有依赖 #

bash
# 在根目录执行
bun install

为特定包添加依赖 #

bash
# 在 packages/web 中添加依赖
cd packages/web
bun add react-router

# 或从根目录
bun add react-router --filter @myorg/web

添加共享依赖 #

bash
# 在根 package.json 添加
bun add -d typescript -w
bun add -d eslint -w

运行脚本 #

运行特定包脚本 #

bash
# 在 packages/web 中运行
cd packages/web
bun dev

# 或使用 --filter
bun --filter @myorg/web dev

运行所有包脚本 #

bash
# 在所有包中运行 build
bun run build --filter '*'

实际示例 #

完整 Monorepo 配置 #

json
// package.json (根)
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["packages/*", "apps/*"],
  "scripts": {
    "dev": "bun run --filter '*' dev",
    "build": "bun run --filter '*' build",
    "test": "bun test",
    "lint": "eslint packages apps"
  },
  "devDependencies": {
    "typescript": "^5.0.0",
    "eslint": "^8.0.0"
  }
}
text
my-monorepo/
├── apps/
│   └── web/
│       ├── package.json
│       └── src/
├── packages/
│   ├── core/
│   │   ├── package.json
│   │   └── src/
│   └── ui/
│       ├── package.json
│       └── src/
├── package.json
├── tsconfig.json
└── bun.lockb

下一步 #

现在你已经了解了 Bun 工作区管理,接下来学习 脚本运行 了解更多脚本配置。

最后更新:2026-03-29