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://xiahunao.cn/news/3224660.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 24.04 LTS (Linux) 安装二维码生成工具 QRencode 二维码生成和识别

1 Ubuntu 安装 sudo apt update sudo apt-get install qrencode 2 查看版本 qrencode -V 3 生成二维码 qrencode -o test.png http://www.baidu.com 可以下载test.png图片,用手机浏览器扫描下看(⊙﹏⊙)

Spring Cloud LoadBalancer 入门与实战

一、什么是 LoadBalancer? LoadBalancer(负载均衡器) 是一种网络设备或软件机制,用于分发传入的网络流量负载(请求)到多个后端目标服务器上,从而实现系统资源的均衡利用和提高系统的可用性和新能。 1.1 负载均衡分类 负载均衡…

Redis 实现高并发库存扣减方案

背景 公司的电商系统下单 操作库存是一个频繁操作,需要高效地扣减库存,把对销售库存的操作抽出来独立设计一个库存中心系统。 功能包括库存的批量添加、获取、下单、支付、回退等的操作。 解决的业务痛点 需要高效不超卖 方案 一、使用msql乐观锁 …

JAVA之开发神器——IntelliJ IDEA的下载与安装

一、IDEA是什么? IEAD是JetBrains公司开发的专用于java开发的一款集成开发环境。由于其功能强大且符合人体工程学(就是更懂你)的优点,深受java开发人员的喜爱。目前在java开发工具中占比3/4。如果你要走java开发方向,那…

几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)

1、PHP禁止IP和IP段访问 <?//禁止某个IP$banned_ip array ("127.0.0.1",//"119.6.20.66","192.168.1.4");if ( in_array( getenv("REMOTE_ADDR"), $banned_ip ) ){die ("您的IP禁止访问&#xff01;");}//禁止某个IP段…

FTP与TFTP

1、TFTP&#xff08;简单文件传输协议&#xff09; TFTP是TCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务。 基于UDP协议 端口号&#xff1a;69 特点&#xff1a;简单、轻量级、易于实现 传输过程&…

对象存储-MinIO-学习-01-安装部署

目录 一、介绍 二、环境信息 三、下载安装包 1、MinIO官网下载地址 2、选择版本 &#xff08;1&#xff09;MinIO Server &#xff08;2&#xff09;MinIO Client &#xff08;3&#xff09;MinIO SDK 四、MinIO SDK安装步骤 1、安装minio库 2、导入minio库报错&…

知识图谱入门笔记

自学参考&#xff1a; 视频&#xff1a;斯坦福CS520 | 知识图谱 最全知识图谱综述 详解知识图谱的构建全流程 知识图谱构建&#xff08;概念&#xff0c;工具&#xff0c;实例调研&#xff09; 一、基本概念 知识图谱&#xff08;Knowledge graph&#xff09;&#xff1a;由结…

基于单片机的温控光控智能窗帘设计探讨

摘 要&#xff1a; 文章使用的核心原件是 AT89C52 单片机&#xff0c;以此为基础进行模块化的设计&#xff0c;在整个设计中通过加入光检测模块和温度检测模块&#xff0c;从而对室内的温度和光照强度进行检测&#xff0c;然后将检测得到的数据传输给单片机&#xff0c;单片机…

【目标跟踪】CoTracker 环境配置

配置 CoTracker 环境 首先下载 conda&#xff0c;然后安装虚拟环境。 1.创建环境&#xff1a;如果环境不存在&#xff0c;你需要创建一个新的 conda 环境。可以使用以下命令创建名为 cotracker 的环境&#xff1a; conda create -n cotracker python3.x 其中 3.x 是你想要安…

coze搭建工作流和Agent

coze搭建工作流和Agent Agent LLM 记忆感知规划使用工具 LLM是大语言模型&#xff0c;prompt提示词影响LLM的输出质量 描述需求——>背景——>解决思路&#xff0c;提示词文档。 当有明确的需求和实现需求的路径时&#xff0c;可以通过搭建工作流来完成标准化任务为…

JVM内存泄露的ThreadLocal详解

目录 一、为什么要有ThreadLocal 二、ThreadLocal的使用 三、实现解析 实现分析 具体实现 Hash冲突的解决 开放定址法 链地址法 再哈希法 建立公共溢出区 四、引发的内存泄漏分析 内存泄漏的现象 分析 总结 错误使用ThreadLocal导致线程不安全 一、为什么要有Thr…

【JavaEE】 简单认识CPU

&#x1f435;本篇文章将对cpu的相关知识进行讲解 一、认识CPU 下图是简略的冯诺依曼体系结构图 上图中&#xff0c;存储器用来存储数据&#xff0c;注意在存储器中都是以二进制的形式存储数据的&#xff0c;CPU就是中央处理器&#xff0c;其功能主要是进行各种算术运算和各种…

Java版Flink使用指南——分流导出

大纲 新建工程编码Pom.xml自定义无界流分流 测试工程代码 在之前的案例中&#xff0c;我们一直使用的是单个Sink来做数据的输出。实际上&#xff0c;Flink是支持多个输出流的。本文我们就来讲解如何在Flink数据输出时做分流处理。 我们将基于《Java版Flink使用指南——自定义无…

公司内部配置GitLab,通过SSH密钥来实现免密clone、push等操作

公司内部配置GitLab&#xff0c;通过SSH密钥来实现免密clone、push等操作。以下是配置SSH密钥以实现免密更新的步骤&#xff1a; 1.生成SSH密钥 在本地计算机上打开终端或命令提示符。输入以下命令以生成一个新的SSH密钥&#xff1a;ssh-keygen -t rsa -b 4096 -C "your…

自动驾驶事故频发,安全痛点在哪里?

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日&#xff0c;武汉城市留言板上出现了多条关于萝卜快跑的投诉&#xff0c;多名市民反映萝卜快跑出现无故停在马路中间、高架上占最左道低速行驶、转弯卡着不动等情况&#xff0c;导致早晚高峰时段出现拥堵。萝卜快跑是百度 A…

Mac VSCode 突然闪退、崩溃、打不开了

1、 思路历程 VSCode 作为前端常用开发工具&#xff0c;其重要性就不一一描述了。 所以 VSCode 突然打不开了&#xff0c;真的是让我一脸懵逼。 本来以为问题不大&#xff0c;于是 &#xff1a; 1、重启了一下VSCode 2、关机重启了一下电脑&#xff1b; 3、清理了一下缓存&am…

RequestContextHolder多线程获取不到request对象

RequestContextHolder多线程获取不到request对象&#xff0c;调用feign接口时&#xff0c;在Feign中的RequestInterceptor也获取不到HttpServletRequest问题解决方案。 1.RequestContextHolder多线程获取不到request对象 异常信息&#xff0c;报错如下&#xff1a; 2024-07-0…

设计模式8-桥模式

设计模式8-Bridge 桥模式 由来与目的模式定义结构代码推导1. 类和接口的定义2. 平台实现3. 业务抽象4. 使用示例总结1. 类数量过多&#xff0c;复杂度高2. 代码重复3. 不符合单一职责原则4. 缺乏扩展性改进后的设计1. 抽象和实现分离&#xff08;桥接模式&#xff09;2. 抽象类…

24/7/10总结

flex布局 父项常见属性 justify-content:设置主轴上的子元素排列方式 flex-wrap:设置子元素是否换行 align-items:设置侧轴上的子元素的排列方式&#xff08;单行&#xff09; 拉伸要把子盒子里的高度给去掉 如果两个align-items都是center并且主轴是y轴就是这种效果…