Bun 支持package.json中的workspaces。工作区使得开发复杂软件变得容易,这些软件作为一个由多个独立包组成的monorepo。
要尝试它,请在package.json的workspaces字段中指定子包的列表;通常将这些子包放在名为packages的目录中。
{
"name": "my-project",
"version": "1.0.0",
"workspaces": ["packages/*"]
}
Glob 支持 — Bun 支持
"workspaces"中的简单<directory>/*通配符。完整的通配符语法(例如**和?)尚未受支持。
这有一些主要优点。
- 代码可以分成逻辑部分。 如果一个包依赖于另一个包,您可以简单地将其添加为
bun add的依赖项。如果包b依赖于a,bun install会将您的本地packages/a目录符号链接到b的node_modules文件夹中,而不是尝试从 npm 注册表中下载它。 - 依赖项可以被去重。 如果
a和b共享一个公共依赖项,它将被提升到根node_modules目录。这减少了冗余的磁盘使用量,并减少了同时安装多个版本的包时出现的与"依赖地狱"相关的问题。
⚡️ 速度 — 安装速度快,即使是对于大型 monorepo 也是如此。Bun 在 Linux 上约在
500ms内安装Remix monorepo。
- 比
npm install快 28 倍- 比
yarn install(v1)快 12 倍- 比
pnpm install快 8 倍