pnpm、Bun 还是 npm:为一个 monorepo 选包管理器

这个项目是一个 monorepo:前端、API 和共享的 schema 包放在一起。最开始的计划是 pnpm workspace,最后换成了 Bun。
包管理器 ≠ 运行时
Bun 同时是三样东西:包管理器、脚本运行器、JavaScript 运行时。它们可以分开选:
- 包管理器:用 Bun。安装快,原生支持 workspaces,lockfile 是文本格式
- 运行时:仍然用 Node。Next.js 以 Node 为主要目标,出问题时更容易判断是谁的锅
bun run dev 执行的脚本里调用的是 next,而 next 的 shebang 是 #!/usr/bin/env node,所以实际跑在 Node 上。
隔离安装
pnpm 有一个很重要的特性:每个包只能 import 自己声明过的依赖。Bun 的 isolated linker 提供同样的保证:
[install]
linker = "isolated"
没有这个限制时,A 包碰巧能 import 到 B 包的依赖,本地一切正常,部署时才发现漏写了依赖。
评论