Bun 的包管理器支持 npm "workspaces"
。这允许你将代码库拆分为多个独立的“包”,这些包位于同一存储库中,可以相互依赖,并且(如果可能)共享一个 node_modules
目录。
克隆 此示例项目 以试验工作区。
根 package.json
不应包含任何 "dependencies"
、"devDependencies"
等。每个单独的包都应该是自包含的,并声明自己的依赖项。类似地,约定声明 "private": true
以避免意外将根包发布到 npm
。
{
"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
的依赖项。
{
"name": "stuff-b",
"dependencies": {
"stuff-a": "workspace:*"
}
}
添加后,从项目根目录运行 bun install
以安装所有工作区的依赖项。
bun install
要向特定工作区添加 npm 依赖项,只需 cd
到相应目录并像往常一样运行 bun add
命令。Bun 将检测到你处于工作区,并在需要时提升依赖项。
cd packages/stuff-a
bun add zod
有关 Bun 包管理器的完整文档,请参阅 文档 > 包管理器。