workspaces。工作区使得将复杂的软件作为由几个独立包组成的_单一代码库_进行开发变得容易。
单一代码库通常具有以下结构:
File Tree
"workspaces" 键用于表示哪些子目录应被视为单一代码库中的包/工作区。通常将所有工作区放在名为 packages 的目录中。
package.json
Glob 支持 — Bun 在
"workspaces" 中支持完整的 glob 语法,包括负向模式(例如
!**/excluded/**)。请参见此处 获取支持语法的完整列表。package.json
workspace:*)作为你的 [package.json] 中的版本字段。
packages/pkg-a/package.json
bun install 将为单一代码库中的所有工作区安装依赖,如果可能的话去重包。如果只想为特定工作区安装依赖,可以使用 --filter 标志。
workspace: 版本将被包的 [package.json] 版本替换,
- 代码可以拆分为逻辑部分。 如果一个包依赖于另一个包,你可以简单地将其添加为 [package.json] 中的依赖。如果包
b依赖于a,bun install将把你的本地packages/a目录安装到 [node_modules] 中,而不是从 npm 注册表下载。 - 依赖可以去重。 如果
a和b共享一个公共依赖,它将被_提升_到根 [node_modules] 目录。这减少了冗余磁盘使用,并最小化了因同时安装多个版本的包而导致的”依赖地狱”问题。 - 在多个包中运行脚本。 你可以使用
--filter标志 在工作区中的多个包中轻松运行 [package.json] 脚本,或使用--workspaces在所有工作区中运行脚本。
使用目录共享版本
当许多包需要相同的依赖版本时,目录允许你在根 [package.json] 中定义 那些版本,并使用catalog: 协议从你的工作区引用它们。更新目录会自动
更新每个引用它的包。详情请参见
目录。
⚡️ 速度 — 安装很快,即使是大型单一代码库。Bun 在 Linux 上大约用
500ms 安装 Remix 单一代码库。- 比
npm install快 28 倍 - 比
yarn install(v1) 快 12 倍 - 比
pnpm install快 8 倍