如何使用 pnpm 实现前端 Monorepo项目管理

前言

随着软件开发项目变得越来越庞大和复杂,如何有效管理和维护代码库成为了一个重要的问题。一种流行的解决方案是 Monorepo,也就是在一个版本控制系统中管理所有的项目代码。

什么是 Monorepo

Monorepo 是一种项目代码管理方式,指单个仓库中管理多个项目,有助于简化代码共享、版本控制、构建和部署等方面的复杂性,并提供更好的可重用性和协作性。
React项目便是基于monrepo方式管理
react monorepo

什么是 Pnpm

pnpm 是一款快速、高效的 Javascript 包管理器。它的核心特点包括节省磁盘空间和更强的安全性。更重要的是,pnpm 支持 workspaces 功能,这使得它成为管理 monorepo 的工具选择。

配置步骤

1. 创建项目文件夹并且创建配置文件**pnpm-workspace.yaml**

在项目根目录下,创建一个名为 pnpm-workspace.yaml 的文件。这个文件可以帮助 pnpm 识别仓库的位置。

我们可以在 packages 设置中,指定哪些文件夹下的包是 workspace 的一部分

packages:- "apps/octopus-app-client"- "apps/octopus-console"

或者避免每个项目都要单独添加,可通过通配符的形式配置 workspace

packages:- 'apps/*'

2. 创建应用项目

monorepo 管理只是一种项目管理方式,最终有价值的部分还是我们的业务应用;例如我们可以将Web项目、NodeJS项目、组件库Lib项目等等相关的工程全部收敛到 apps目录下。

Untitled.png

3. 安装依赖

我们在项目根目录下运行 pnpm install。这一步会安装我们的所有包之间的依赖关系。

Untitled.png

4. 应用启动

执行完项目依赖安装后,各自应用都可以按照单独仓库的运行开发方式开发调试了。至此,我们实现了最简单的monorepo管理,也就是把多个应用项目放到了同一个大文件夹下管理,项目依赖统一管理,git版本统一管理,对于开发者而言,它就是一个整体。

但是,有时候我们还需要一些进阶的玩法,比如如何在业务项目中依赖 monorepo 中的组件库项目?如何在项目根路径运行应用的脚本?

进阶

1. 添加依赖包

如果你有一个 package 依赖于另一个 package,你可以使用 pnpm add 添加这个依赖。

例如,在 apps/app-web文件夹下运行 pnpm add @common/components@common/component 就会被添加到 app-web 的**package.json** 文件中。

Untitled.png

2. 运行所有项目的脚本

如果启动项目需要运行所有应用项目的 start脚本,一种比较笨的方式是在每个项目的路径下运行启动脚本,pnpm也提供了一种便捷的方式。

使用 pnpm recursive 命令在所有包中运行特定脚本。例如,**pnpm recursive s**tart 命令将会所有包中运行 start 脚本。

总结

monorepo 是大型项目的常用的管理方式,虽然它也有不少缺点,比如代码仓库过大、权限不好管理、构建部署消耗资源等等,但是它也解决了不少大型项目的痛点,比如代码复用、多项目协同开发、依赖管理等问题。

pnpm 是前端项目最常用的依赖管理工具,并且它还提供了**workspace**管理的能力,那么基于pnpm来管理monorepo项目是一种不错的解决方案。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css mask 案例

文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩,可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性,可以创建独特的效果,比如圆形、渐变…

【FPGA】分享一些FPGA高速信号处理相关的书籍

在做FPGA工程师的这些年,买过好多书,也看过好多书,分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

小红书找达人全流程,kol投放逻辑总结!

什么是KOL投放逻辑?现在大多市面上的公认的说法是,旨在广告或营销活动中如何合理地利用KOL的影响力来达到预期的营销结果。今天,我们就来为大家分享一下小红书找达人全流程,kol投放逻辑总结! 1. 选择投放路径 评估KOL的影响力。根…

非对称加密与对称加密的区别是什么?

在数据通信中,加密技术是防止数据被未授权的人访问的关键措施之一。而对称加密和非对称加密是两种最常见的加密技术,它们被广泛应用于数据安全领域,并且可以组合起来以达到更好的加密效果。本文将探讨这两种技术的区别,以及它们在…

分布式训练通信NCCL之Ring-Allreduce详解

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

Java开发框架和中间件面试题(5)

44.Tomcat一个请求的处理流程? 假设来自客户的请求为: http://localhost:8080/test/index.jsp请求被发送到本机端口8080,被在那里侦听Copote HTTP/1.1 Connector,然后 1.Connector把该请求交给它所在的Service的Engi…

Java Web基础详解

回顾 之前的两篇的文章已经大概的带我们了解了tomcat的一些基本的操作,比如从零搭建我们自己的调试环境以及官方文档构建的方式,接下来的话,我将带大家来了解一下tomcat的一些基础知识,这些基础知识将以问题的方式抛出&#xff0…

如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务

文章目录 1.测试环境2.本地配置2. 内网穿透2.1 下载安装cpolar内网穿透2.2 创建隧道3. 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名5. 使用固定二级子域名进行访问 1.测试环境 MavenSpring bootJdk 1.8 2.本地配置 获取支付宝支付Java SDK,…

windows中修改my.ini出现MySQL服务正在启动或停止中或服务无法启动

问题: 1.修改my.ini 2.在服务里启动MySQL服务正在启动或停止中或服务无法启动 解决办法: 1.修改my.ini编码方式 2.删除 安装目录中的data文件夹 3.winR(管理员身份运行cmd) cd 到安装目录中的bin文件夹 4.在cmd中运行 mysql…

微小奇迹的呵护:新生儿早产的温馨关怀

引言: 早产儿是生命的奇迹,但他们需要更多的呵护和关爱。对于家庭而言,正确的护理和关注对于早产儿的健康至关重要。本文将深入探讨早产儿的定义、早产的原因,以及家长在面对早产的时候应该采取的关键措施,为这些微小…

iOS设备信息详解

文章目录 ID 体系iOS设备信息详解IDFA介绍特点IDFA新政前世今生获取方式 IDFV介绍获取方式 UUID介绍特点获取方式 UDID介绍获取方式 OpenUDID介绍 Bundle ID介绍分类其他 IP地址介绍获取方式 MAC地址介绍获取方式正常获取MAC地址获取对应Wi-Fi的MAC地址 系统版本获取方式 设备型…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)Dispatcher模块的实现思路和定义

(四)Dispatcher模块的实现思路 关于dispatcher,它应该是反应堆模型里边的核心组成部分,因为如果说这个反应堆模型里边有事件需要处理,或者说有事件需要检测,那么是需要通过这个poll、epoll 或者 select来完…