目录
- 前言
 - 一、pnpm简介
 - 特点:
 - 对比
 
- 二、 创建项目
 - 添加文件 `pnpm-workspace.yaml`
 - 目录结构
 - pnpm `workspace: 协议`
 - 修改配置文件
 - 执行 安装
 
- 三、命令解析
 - 执行包命令
 - 所有包操作命令
 
- 四、实例代码
 
前言
前面两篇,我们讲了
yarn + workspace和lerna, yarn + lerna 的组合已经是现在 monorepo 的通用方案,也是功能最多,最火的方案,如果还没看,可以回顾下
- Monorepo仓库管理策略之 Lerna
 - Monorepo仓库管理策略之yarn workspaces
 
一、pnpm简介
pnpm Workspace 是 pnpm 的一个特性,它允许你管理多个包(或项目)作为一个单一的单元。这在开发大型的、由多个包组成的应用程序时非常有用,例如在微服务架构或库的多个版本中。
特点:
- 节省空间:通过共享依赖项,pnpm 减少了磁盘的使用。
 - 快速安装:由于依赖项的共享,安装过程可以更快完成。
 - 并行安装:pnpm 可以并行安装包,进一步提高效率。
 - 精确的版本控制:pnpm 能够精确控制依赖项的版本,避免版本冲突。
 
对比
| 特性/工具 | pnpm Workspace | Yarn + Lerna | 
|---|---|---|
| 空间节省 | 通过硬链接和符号链接共享依赖,节省空间 | 依赖项存储在每个包中,可能占用更多空间 | 
| 安装速度 | 并行安装,快速安装依赖项 | Yarn 缓存机制,但可能不如 pnpm 快 | 
| 依赖版本控制 | 精确控制,减少依赖冲突 | 需要手动管理依赖版本,可能存在冲突 | 
| 社区与生态 | 相对较新,社区可能不够成熟 | 成熟的生态系统,广泛的社区支持 | 
| 工作流管理 | 简单直观,易于配置 | Lerna 提供复杂的工作流管理 | 
| 兼容性 | 可能在某些操作系统上存在问题 | 广泛的兼容性,适用于多种环境 | 
| 自定义与扩展 | 较少的插件,但核心功能强大 | Yarn 插件系统,允许更多自定义和扩展 | 
| 易用性 | 配置简单,易于上手 | 配置可能相对复杂,需要更多设置 | 
二、 创建项目
我们以前两篇文章的
ziyu-cart、ziyu-user包来作为 pnpm 的 packages 项目,后面的包我也会上传至git
mkdir pnpm-workspace && cd pnpm-workspace pnpm init 
 
添加文件 pnpm-workspace.yaml
 
packages:# all packages in direct subdirs of packages/- 'packages/*' 
目录结构

pnpm workspace: 协议
 
例如,如果工作区中有 foo、bar、qar、zoo,它们的版本均为 1.5.0,则如下:
{"dependencies": {"foo": "workspace:*","bar": "workspace:~","qar": "workspace:^","zoo": "workspace:^1.5.0"}
}
 
将转化为:
{"dependencies": {"foo": "1.5.0","bar": "~1.5.0","qar": "^1.5.0","zoo": "^1.5.0"}
}
 
修改配置文件
我们之前在
ziyu-cart中 将ziyu-user这个包引入了,现在我们修改下引入方式
  "dependencies": {-    "ziyu-user": "0.0.3"+   "ziyu-user": "workspace:*"}, 
执行 安装
pnpm i 
 

三、命令解析
执行包命令
在根目录执行
ziyu-cart包的test命令,ziyu-cart包 是引用了ziyu-user包文件
pnpm --filter ziyu-cart test
 
--filter ziyu-cart : 这是 pnpm 过滤允许您将命令限制于包的特定子集。

所有包操作命令
# 根项目 安装
pnpm add -D -w rimraf    
 

# 执行所有包的del 命令
pnpm --filter "./packages/**" del 

# 移除 ziyu-cart lodash包
pnpm rm  --filter ziyu-cart lodash
 

四、实例代码
github pnpm-workspace
