跳到主要内容

3 篇博文 含有标签「Monorepo」

查看所有标签

很多人第一次接触 pnpm workspaceyarn workspacemonorepo,都会有点懵:

为什么一个仓库里会有这么多包?它们又是怎么互相引用的?

这时候你大概率会看到一个词:Workspace

如果只用一句人话解释它,可以这么理解:

Workspace 就是把一个仓库里的多个包组织起来,让它们既能一起管理,又能直接互相依赖。

它最常见的使用场景,就是 Monorepo

比如一个前端仓库里,可能同时有:

  • 一个主应用
  • 一个组件库
  • 一个工具包
  • 一个命令行脚手架

这些包都放在同一个仓库里,但又不是一坨代码混在一起。
这时候,Workspace 就是把它们串起来的那套机制。

当项目开始走向 Monorepo,一个仓库里同时维护多个包时,很快就会遇到一个现实问题:

代码能一起写了,那版本号、CHANGELOG、发版流程怎么一起管?

这时候很多团队会用到一个工具:Changesets

如果用一句最通俗的话解释它,可以这么理解:

Changesets 就像 Monorepo 里的“发版记录单”系统。

你每做完一次改动,就先记一张“这次改了什么、该升哪个版本”的单子;等准备发版时,再统一计算版本号、生成 CHANGELOG、执行发布。

它最适合的场景,就是:

  • 一个仓库里有多个 npm 包
  • 包和包之间有依赖关系
  • 团队希望版本管理更清晰、发布流程更自动化

很多人第一次接触前端工程化时,看到 Monorepopnpm workspaceChangesets 这几个词,经常会有点混:

  • 它们是不是一回事?
  • 为什么总是一起出现?
  • 到底谁负责开发,谁负责发布?

其实它们不是同一种东西,而是处在不同层级

如果只用一句话总结三者关系,可以这么理解:

Monorepo 负责“组织方式”,pnpm workspace 负责“本地开发和依赖管理”,Changesets 负责“版本管理和发布”。

也就是说:

  • Monorepo 是一种架构思路
  • pnpm workspace 是落地这套架构的开发工具
  • Changesets 是给这套架构补上发版流程的工具

这篇文章就专门把这三者的分工讲清楚。