mikexxz
全部文章

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 包的依赖,本地一切正常,部署时才发现漏写了依赖。

评论

删除这条评论?

评论内容会被清除,无法恢复。