pnpm workspace使用教程【Monorepo项目】

目录

    • 前言
    • 一、pnpm简介
      • 特点:
      • 对比
    • 二、 创建项目
      • 添加文件 `pnpm-workspace.yaml`
      • 目录结构
      • pnpm `workspace: 协议`
      • 修改配置文件
      • 执行 安装
    • 三、命令解析
      • 执行包命令
      • 所有包操作命令
    • 四、实例代码

前言

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

  • Monorepo仓库管理策略之 Lerna
  • Monorepo仓库管理策略之yarn workspaces

一、pnpm简介

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

特点:

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

对比

特性/工具pnpm WorkspaceYarn + 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/788377.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

局域网远程共享桌面如何实现

在局域网内实现远程共享桌面,可以通过以下几种方法: 一、使用Windows自带的远程桌面功能: 首先,在需要被控制的电脑上右键点击“此电脑”,选择“属性”。 进入计算机属性界面后,点击“高级系统设置”&am…

记录excel表生成一列按七天一个周期的方法

使用excel生成每七天一个周期的列。如下图所示: 针对第一列的生成办法,使用如下函数: TEXT(DATE(2024,1,1)(ROW()-2)*7,"yyyy/m/d")&" - "&TEXT(DATE(2024,1,1)(ROW()-1)*7-1,"yyyy/m/d") 特此记录。…

一文实践强化学习训练游戏ai--doom枪战游戏实践

一文实践强化学习训练游戏ai–doom枪战游戏实践 上次文章写道下载doom的环境并尝试了简单的操作,这次让我们来进行对象化和训练、验证,如果你有基础,可以直接阅读本文,不然请你先阅读Doom基础知识,其中包含了下载、动作…

android CameraX构建相机拍照

Android CameraX 是一个 Jetpack 支持库,旨在简化相机应用的开发工作。它提供了一致且易用的API接口,适用于大多数Android设备,并可向后兼容至Android 5.0(API级别21)。 CameraX解决了在多种设备上实现相机功能时所遇…

14-56 剑和诗人30 - IaC、PaC 和 OaC 在云成功中的作用

介绍 随着各大企业在 2024 年加速采用云计算,基础设施即代码 (IaC)、策略即代码 (PaC) 和优化即代码 (OaC) 已成为成功实现云迁移、IT 现代化和业务转型的关键功能。 让我在云计划的背景下全面了解这些代码功能的当前状态。我们将研究现代云基础设施趋势、IaC、Pa…

java:获取当前的日期和时间

// 获取当前的日期和时间LocalDateTime now LocalDateTime.now();// 定义日期时间格式化器DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");// 格式化日期时间String formattedDateTime now.format(formatter);// 打印结果Syste…

【数据结构和算法的概念等】

目录 一、数据结构1、数据结构的基本概念2、数据结构的三要素2.1 数据的逻辑结构2.2 数据的存储(物理)结构2.3 数据的运算 二、算法1、算法概念2、算法的特性及特点3、算法分析 一、数据结构 1、数据结构的基本概念 数据: 是所有能输入到计…

前端八股文 对事件循环的理解

对事件循环的理解 思维导图 图示 实际案例的执行过程 总结

能源电子领域2区SCI,版面稀缺,即将截稿,无版面费!

【SciencePub学术】今天小编给大家推荐1本能源电子领域的SCI!影响因子1.0-2.0之间,最重要的是审稿周期较短,对急投的学者较为友好! 能源电子类SCI 01 / 期刊概况 【期刊简介】IF:1.0-2.0,JCR2区&#xf…

【C++】C++入门基础--引用,inline,nullptr

文章目录 前言一、引用?1.1 引用的概念和定义1.2 引用的特性1.3 引用的使用1.4 const引用(常引用)1.5 指针和引用的关系 二、inline2.1inline概念和定义2.2 inline使用2.3 inline注意事项 三.nullptr总结 前言 上一篇文章我们介绍了C中的命名…

枚举对象序列化规则(将Java枚举转换为JSON字符串的步骤)

文章目录 引言I 案例分析1.1 接口签名计算1.2 请求对象1.3 枚举对象序列化II 在JSON中以枚举的code值来表示枚举的实现方式2.1 自定义toString方法返回code引言 在Java中,每个对象都有一个toString方法,用于返回该对象的字符串表示。默认情况下,Enum类的toString方法返回的…

C语言笔记30 •单链表经典算法OJ题-2.移除链表元素•

移除链表元素 1.问题 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 2.代码实现&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h&g…

【RHCE】转发服务器实验

1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通

特征及特征选择

1、特征&#xff08;Feature&#xff09;是什么&#xff1f; 特征是数据集中的一个可量化的属性或变量&#xff0c;用于描述数据点的特性。 特征可以是连续的数值&#xff0c;如身高、体重等&#xff0c;也可以是离散的类别&#xff0c;如性别、种族等。 常见的特征有边缘、角、…

Mosh|初学者 SQL 教程

sql文件链接&#xff1a;链接: https://pan.baidu.com/s/1okjsgssdxMkfKf8FEos7DA?pwdf9a9 提取码: f9a9 在mysql workbench 导入 create_databases.sql 文件&#xff0c;下面是运行成功的界面 快捷方式&#xff1a;全部运行可以同时按下controlcommandenter &#xff0c;或者…

Linux学习之网络配置问题

Linux学习——那些我们网络配置遇到过的问题&#xff1f;ping不通百度&#xff1f;XShell连接不上&#xff1f;&#xff08;超详细&#xff09; &#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感…

详细谈谈负载均衡的startupProbe探针、livenessProbe探针、readnessProbe探针如何使用以及使用差异化

文章目录 startupProbe探针startupProbe说明示例配置参数解释 使用场景说明实例——要求&#xff1a; 容器在8秒内完成启动&#xff0c;否则杀死对应容器工作流程说明timeoutSeconds: 和 periodSeconds: 参数顺序说明 livenessProbe探针livenessProbe说明示例配置参数解释 使用…

生产者消费者模型和线程同步问题

文章目录 线程同步概念生产者消费者模型条件变量使用条件变量唤醒条件变量 阻塞队列 线程同步概念 互斥能保证安全,但是仅有安全不够,同步可以更高效的使用资源 生产者消费者模型 下面就基于生产者消费者来深入线程同步等概念: 如何理解生产消费者模型: 以函数调用为例: 两…

LNMP搭建Discuz和Wordpress

1、LNMP L:linux操作系统 N&#xff1a;nginx展示前端页面web服务 M&#xff1a;mysql数据库&#xff0c;保存用户和密码&#xff0c;以及论坛相关的内容 P&#xff1a;php动态请求转发的中间件 数据库的作用&#xff1a; 登录时验证用户名和密码 创建用户和密码 发布和…

存储产品选型策略 OSS生命周期管理与运维

最近在看阿里云的 云存储通关实践认证训练营这个课程还是不错的。 存储产品选型策略、对象存储OSS入门、基于对象存储OSS快速搭建网盘、 如何做好权限控制、如何做好数据安全、如何做好数据管理、涉及对象存储OSS的权限控制、使用OSS完成静态网站托管、对OSS中存储的数据进行分…