Bun

指南包管理器

使用 Bun 配置使用工作区的单一存储库

Bun 的包管理器支持 npm "workspaces"。这允许你将代码库拆分为多个独立的“包”,这些包位于同一存储库中,可以相互依赖,并且(如果可能)共享一个 node_modules 目录。

克隆 此示例项目 以试验工作区。

package.json 不应包含任何 "dependencies""devDependencies" 等。每个单独的包都应该是自包含的,并声明自己的依赖项。类似地,约定声明 "private": true 以避免意外将根包发布到 npm

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

通常将所有包都放在 packages 目录中。package.json 中的 "workspaces" 字段支持 glob 模式,因此你可以使用 packages/* 来指示 packages 的每个子目录都应被视为单独的(也称为工作区)。

.
├── package.json
├── node_modules
└── packages
    ├── stuff-a
    │   └── package.json
    └── stuff-b
        └── package.json

要添加工作区之间的依赖项,请使用 "workspace:*" 语法。此处我们正在添加 stuff-a 作为 stuff-b 的依赖项。

packages/stuff-b/package.json
{
  "name": "stuff-b",
  "dependencies": {
    "stuff-a": "workspace:*"
  }
}

添加后,从项目根目录运行 bun install 以安装所有工作区的依赖项。

bun install

要向特定工作区添加 npm 依赖项,只需 cd 到相应目录并像往常一样运行 bun add 命令。Bun 将检测到你处于工作区,并在需要时提升依赖项。

cd packages/stuff-a
bun add zod

有关 Bun 包管理器的完整文档,请参阅 文档 > 包管理器