pnpm workspace使用教程【Monorepo项目】

目录

前言

前面两篇,我们讲了 yarn + workspacelerna , yarn + lerna 的组合已经是现在 monorepo 的通用方案,也是功能最多,最火的方案,如果还没看,可以回顾下

一、pnpm简介

pnpm Workspace 是 pnpm 的一个特性,它允许你管理多个包(或项目)作为一个单一的单元。这在开发大型的、由多个包组成的应用程序时非常有用,例如在微服务架构或库的多个版本中。

特点:

  • 节省空间:通过共享依赖项,pnpm 减少了磁盘的使用。
  • 快速安装:由于依赖项的共享,安装过程可以更快完成。
  • 并行安装:pnpm 可以并行安装包,进一步提高效率。
  • 精确的版本控制:pnpm 能够精确控制依赖项的版本,避免版本冲突。

对比

特性/工具 pnpm Workspace Yarn + Lerna
空间节省 通过硬链接和符号链接共享依赖,节省空间 依赖项存储在每个包中,可能占用更多空间
安装速度 并行安装,快速安装依赖项 Yarn 缓存机制,但可能不如 pnpm 快
依赖版本控制 精确控制,减少依赖冲突 需要手动管理依赖版本,可能存在冲突
社区与生态 相对较新,社区可能不够成熟 成熟的生态系统,广泛的社区支持
工作流管理 简单直观,易于配置 Lerna 提供复杂的工作流管理
兼容性 可能在某些操作系统上存在问题 广泛的兼容性,适用于多种环境
自定义与扩展 较少的插件,但核心功能强大 Yarn 插件系统,允许更多自定义和扩展
易用性 配置简单,易于上手 配置可能相对复杂,需要更多设置

二、 创建项目

我们以前两篇文章的 ziyu-cart ziyu-user 包来作为 pnpm 的 packages 项目,后面的包我也会上传至git

bash 复制代码
mkdir pnpm-workspace && cd pnpm-workspace 

pnpm init 

添加文件 pnpm-workspace.yaml

bash 复制代码
packages:
  # all packages in direct subdirs of packages/
  - 'packages/*'

目录结构

pnpm workspace: 协议

例如,如果工作区中有 foo、bar、qar、zoo,它们的版本均为 1.5.0,则如下:

json 复制代码
{
	"dependencies": {
		"foo": "workspace:*",
		"bar": "workspace:~",
		"qar": "workspace:^",
		"zoo": "workspace:^1.5.0"
	}
}

将转化为:

json 复制代码
{
	"dependencies": {
		"foo": "1.5.0",
		"bar": "~1.5.0",
		"qar": "^1.5.0",
		"zoo": "^1.5.0"
	}
}

修改配置文件

我们之前在 ziyu-cart 中 将 ziyu-user 这个包引入了,现在我们修改下引入方式

json 复制代码
  "dependencies": {
 -    "ziyu-user": "0.0.3"
 +   "ziyu-user": "workspace:*"
  },

执行 安装

bash 复制代码
pnpm i 

三、命令解析

执行包命令

在根目录执行 ziyu-cart 包的 test命令,ziyu-cart 包 是引用了 ziyu-user 包文件

bash 复制代码
pnpm --filter ziyu-cart test

--filter ziyu-cart : 这是 pnpm 过滤允许您将命令限制于包的特定子集。

所有包操作命令

bash 复制代码
# 根项目 安装
pnpm add -D -w rimraf    
bash 复制代码
# 执行所有包的del 命令
pnpm --filter "./packages/**" del
bash 复制代码
# 移除 ziyu-cart lodash包
pnpm rm  --filter ziyu-cart lodash

四、实例代码

github pnpm-workspace

相关推荐
OPEN-F6 小时前
C++进阶教程:继承与多态
开发语言·c++
泯泷7 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree7 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
DogDaoDao7 小时前
Windows 开发提效工具全景指南:60+ 工具的工程化分层配置
windows·git·程序员·开发工具·powershell·everything·msys2
luj_17687 小时前
大律师考核应重能力与科技素养
c语言·开发语言·c++·经验分享·算法
里欧跑得慢8 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢8 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼8 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
leonkay9 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
harmful_sheep9 小时前
java group by常见用法
java·开发语言·python