1分钟教你从0-1搭建Monorepo多包项目

news2024/11/17 16:47:17

1、monorepo是啥

在了解Monorepo之前,先说一下Multirepo Multirepo:指定的是不同项目由不同的仓库来存放管理
每个仓库都维护着各项目的npm包依赖 Monorepo指的是包含多个项目的单个仓库。 各个项目可以单独运行、打包、发布

在这里插入图片描述
在这里插入图片描述

Multirepo:分散式管理
Monorepo:集中式管理

1.1 MultirepoMonorepo特点

Muitirepo
1、简单明朗
2、灵活
3、缺点:

  • 项目之间难以建立联系
  • 将模块打包为npm包,发布到npm上
  • 挂载到全局变量window
  • 直接copy一份代码

Monorepo

  • 良好的代码共享
  • 新建项目方便
  • 开发便利
  • 缺点
    • 巨石项目下载、
    • 编译慢;
    • 对项目打包构建难度较大

目前已有很多的开源项目使用monorepo,如:Vue、React、babel、Element ui等

1.2 管理工具

1.bazel
2.lerna(版本管理和发布)+yarn/npm
3.pnpm

1.3 pnpm简介

pnpm和npm、yarn一样,是一个包管理器
特点:

  • 节省磁盘空间 安装速度快 支持monorepo

pnpm内部使用了基于内容寻址的方式来存储包文件的,不会重复安装同一个包的依赖;
如果使用yarn/npm。如果多个项目都依赖同一个包,那这个包可能会被安装多次
pnpm安装的包,如果其他项目需要用到这个包,那么会使用硬链接去连接到这个包 消除依赖提升,创建非扁平化的node_modules
“幽灵依赖”放在了node_modules下的.pnpm

1.4 pnpm常用命令

// 安装依赖
pnpm i  /  pnpm install

// 单独安装
pnpm add xxx

// 删除依赖
pnpm remove xxx

// 运行项目
pnpm dev  / pnpm run dev

// 安装依赖到根目录
pnpm add xxx -w

// 安装依赖到packages中的包
pnpm add xxx -r

// 安装到某个包
pnpm add xxx --filter A

2、Monorepo结构

├─packages
|  ├─A
     ├─package.json
|  ├─B
     ├─package.json
|  ├─C
     ├─package.json
├─package.json
├─pnpm-workspace.yaml
├─README.md

2.1 pnpm-workspace.yaml

pnpm工作区包含/排除的目录
放在根目录下

packages:
  # all packages in direct subdirs of packages/
  - 'packages/*'
  
  # exclude packages that are inside test directories
  - '!**/A/**'

3 构建monorepo-demo

在这里插入图片描述

重要的事情说三遍:

## 1、不要在根目录package.json中的dependencies安装依赖,在各自的包里面安装,根目录主要是提供给工程配置用的! 

## 2、packages中包的依赖尽量保持一致`

以上就是简单的monorepo的搭建,后面会根据项目拓展增加需要注意的点!

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

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

相关文章

【CV】EfficientNet相比resnet有哪些优点,什么是深度可分离卷积

目录 前言使用深度可分离卷积普通卷积的计算参数量深度可分离卷积分为两个步骤:深度卷积和逐点卷积 使用多个缩放因子使用 Swish 激活函数 前言 高效的神经网络主要通过:1. 减少参数数量;2. 量化参数,减少每个参数占用内存 目前的…

Transformer中的Q,K,V

Query,Key,Value的概念取自于信息检索系统,举个简单的搜索的例子来说。当你在某电商平台搜索某件商品(年轻女士冬季穿的红色薄款羽绒服)时,你在搜索引擎上输入的内容便是Query,然后搜索引擎根据…

【历史上的今天】6 月 25 日:笔记本之父诞生;Windows 98 发布;通用产品代码首次商用

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 6 月 25 日,在 1951 年的这一天,世界上第一部彩色电视节目播出。电视经过了许多年的发展,人类的娱乐途径随着互联网的到来变…

SpringBoot 如何使用 Spring Test 进行集成测试

SpringBoot 如何使用 Spring Test 进行集成测试 简介 在开发过程中,单元测试是不可或缺的,它可以帮助我们及时发现代码的问题并进行修复,从而提高代码的质量和可维护性。但是,单元测试只能测试单个方法或类的功能,无…

HTTP | 深度解析HTTPS比HTTP 更安全的原因

目录 1. 不安全的 HTTP 🌳 为什么 HTTP 协议不安全呢? 容易被窃听 容易被篡改 容易被伪造身份 🌳 HTTPS 是如何解决以上安全性问题的呢? 数据加密 完整性摘要 数字证书 2. 加密算法 (1)对称加密…

Springboot宠物医院管理系统的设计与实现-计算机毕设 附源码84724

Springboot宠物医院管理系统的设计与实现 摘 要 现如今生活质量提高,人们追求精神健康,与家中宠物朝夕相处,感情深厚,宠物渐渐成了我们身边的朋友。因而宠物生病了,需要去看病,自古医院救死扶伤&#xff0c…

LabVIEW开发汽车发动机故障模拟器

LabVIEW开发汽车发动机故障模拟器 汽车发动机故障模拟器是一种电子培训系统,旨在指导初学者了解发动机的各种故障。有一些参数称为发动机故障,例如脏油、压缩不良、冷却液损失、润滑不良、散热器堵塞、火花爆震和火花塞磨损。任何系统在存在时都有一些缺…

分布式系统的事务处理:2PC与3PC的演化与挑战

在传统的单体应用中,事务管理相对较为简单,可以通过数据库事务来实现数据的一致性。然而,随着系统的拆分和分布式架构的应用,跨多个服务的事务操作变得更为复杂。这就引出了分布式事务的概念,它是保证分布式系统数据一…

io.netty学习(十二)Netty 工作原理

目录 前言 Netty 模型 代码示例 引入Maven依赖 服务端的管道处理器 服务端主程序 客户端管道处理器 客户端主程序 测试运行 总结 前言 上一篇文章我们对 Reactor 模型进行了详细的讲解,下面我们就来探究一下 Netty 模型,Netty 采用的就是 主从…

一章:UltraiSO制作启动u盘+制作winPE镜像+硬盘安装系统

简单明了,希望对于伙伴们有帮助!!! 目录 一、使用ultraiso制作启动u盘 二、老毛桃制作winPE镜像 三、硬盘安装系统 等待完成即可 一、使用ultraiso制作启动u盘 第一步 双击打开ultraiso,点击文件->打开->选…

Navicat for Redis 功能介绍

Navicat Premium 版本 16.2在原本已很优秀的产品上新增了多个令人兴奋的新功能,其中最值得注意的是对 Redis 的支持。现在,Navicat 有一个特别针对 Redis 管理和开发的客户端——Navicat for Redis。它为用户提供了一个易于访问的界面,以可视…

花了3周理解的xgboost算法原理

文章目录 算法流程CART树最佳节点值最佳树结构 算法流程 先学决策树,再学随机森林,最后才来到xgboost。本以为如此平滑地过渡过来,会容易一些,没想到还是这么艰难。零零散散花了3周多的时间,看了好多文章的解释和阐述…

大数据从0到1的完美落地之Flume案例2

案例演示 实时采集(监听目录):Spool File HDFS Spool 是Source来源于目录,有文件进入目录就摄取,File Channel将它暂存到磁盘,最终目的地是HDFS 即只要某个目录不断有文件,HDFS上也会同步到所有数据。 配置方案 [ro…

机器学习:基于逻辑回归对航空公司乘客满意度的因素分析

机器学习:基于逻辑回归对航空公司乘客满意度的因素分析 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点…

前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容

前端Vue仿京东加入购物车弹框立即购买弹框shopDialog自定义弹框内容, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id13183 效果图如下: # cc-shopDialog #### 使用方法 使用注意: 该插件需引用…

【软件基础】面向对象编程知识总结

文章目录 前言一、面向对象要解决的问题1、 软件重用性差2、软件可维护性差3、不能满足用户需求 二、面向对象的基本概念三、面向对象的特征四、面向对象的要素五、面向对象的开发方法六、面向对象的模型1、对象模型2、动态模型3、功能模型 总结1、鸭子抽象类2、鸭子类3、鸭子动…

【Tableau案例】神奇宝贝属性及实力强弱|数据可视化

提前声明:神奇宝贝的数据分析仅供参考,不涉及对于神奇宝贝的各种评价,另外我是初学tableau,涉及到使用的tableau操作可能很简单,复杂的还掌握不熟练,之后会拿时间系统学习tabelau。 数据预处理 该数据集有…

电容笔和触控笔哪个好用?推荐平价好用的电容笔

实际上,电容笔和触控笔这两款笔最大的区别,就在于它的应用范围,一个是适用电容型屏幕,一个是适用电阻型屏幕。如果你想要一个与IPAD相匹配的电容笔,苹果的Pencil将会是一个很好的选择。实际上,平替的电容笔…

Java-API简析_java.lang.Throwable类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131367906 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

成都爱尔林江院长解析看懂验光单,掌握配镜“秘密”

想要更了解自己的“数据”, 想知道自己近视有没有增长, 该如何知道自己的度数呢? 到医院进行验光, 验光后得到的验光单,自己有仔细看过吗? 一串字母与数字,知道都代表着什么吗?…