跳到主要内容

5 篇博文 含有标签「pnpm」

查看所有标签

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

它最适合的场景,就是:

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

如果你刚接触前端工程化,第一次看到 npm installyarn installpnpm install,大概率会有一个疑问:

它们不都是“装包”的吗?为什么会有三个?

答案是:它们做的是同一件事,但解决问题的方式不一样。

  • npm 是 Node.js 官方自带的包管理器,历史最久,生态最稳。
  • Yarn 是在 npm 早期体验不够好的时候出现的,重点解决“慢”和“不稳定”。
  • pnpm 是在 Yarn 和 npm 继续发展之后,进一步解决“磁盘浪费”和“依赖不严谨”的问题。

这篇文章不讲太多绕人的术语,只用一条主线讲清楚:

为什么会从 npm 发展到 Yarn,再发展到 pnpm?

Node.jsnpmYarnpnpm包管理7 分钟阅读

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

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

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

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

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

也就是说:

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

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

很多人第一次用 pnpm,都会先感受到两个特点:

  • 安装速度挺快
  • node_modules 看起来和 npmYarn 不太一样

然后就会冒出一个问题:

pnpm 到底做了什么,为什么它既能省空间,又能保持依赖可用?

如果你去搜它的原理,常常会看到一堆词:

  • 内容寻址存储
  • 硬链接
  • 软链接
  • 严格依赖隔离

这些词本身没错,但一上来全堆出来,反而很容易越看越晕。

这篇文章我想用更通俗的方式,把 pnpm 的底层逻辑讲清楚。你不需要先懂文件系统,只要抓住一条主线:

pnpm 的核心目标,就是“同样的包尽量只存一份,同时又要让 Node.js 还能正常找到它”。