pnpm + monorepo架构思想小试牛刀

news2024/11/20 11:36:50

写在前面

今天要写的是关于一种前端全新架构的方式,monorepo这是目前相对来讲比较新的一种前端架构,整好趁着最近在学,就利用这个平台记录一下学习的一个过程,上一篇文章更新的是react,后面也会一样更新,今天废话不多说了,我们开始今天的学习

什么是monorepo架构,他解决了一个什么问题

在回答这个问题之前,我们试想一种场景,假设我们手里有两个以上的前端项目,不同项目之间用的api和组件或者方法有共用的地方,那么怎么设计这个前端的架构才是最合理的,目前已知的一些常见的架构就是创建三个项目,将共用的组件创建好,分别引入使用即可,再稍微高级一些的,可以将组件发布到npm包管理的网站进行管理,项目分别引入使用,这样的话后面更新组件的时候不同的项目只需要重新拉一下最新的版本即可,公共的组件如果不发布到公网或者自己搭建的私网上就会相对更加的麻烦,改一个组件的时候,三个组件都要改,这就导致一个问题就是当很多项目的时候那么改的统一性就成了问题,如果不统一就会有不同步的问题,或者是某一个项目是好的,但是别的都是不对的,这样排查问题的成本就高了很多,以上问题的存在使用monorepo架构都可以得到解决,所以基本上monorepo的作用就体现出来了。

怎么设计一个monorepo架构

首先说明一点,这个架构因为我也是刚开始接触,这也是我第一篇关于这个的文章,所以设计的比较简单,后面用到的多了,我会再更新相对来说比较复杂的架构,这里最多的是说明一下这个架构的大体思路

初始化一个package.json

pnpm init

创建一个pnpm-workspace.yaml文件/配置文件内容

touch pnpm-workspace.yaml
// 内容
packages:
  # 前端项目储存的地方
  - 'projects/*'
  # 所有组件存储的地方
  - 'components/**'
  # 所有的方法 
  - 'api/**'

新建一个组件库的文件夹/初始化对应的操作

mkdir components
// 初始化package.json
pnpm init 
// 新建一个组件
cd components 
touch Button.vue
components/Button.vue内容
<!--
 * @use: 
 * @description: 
 * @SpecialInstructions: 无
 * @Author: clearlove
 * @Date: 2023-06-16 11:25:31
 * @FilePath: /monorepoDemo/componrnts/modules/Button.vue
-->
<template>
  <div>
    <button>THIS IS PUBLIC BUTTON</button>
  </div>
</template>
<script></script>
<style></style>
components/package.json 内容
{
  "name": "@lm/components",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "private" : true,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
  • 说明: 这里的name可以随便起,但是最好是起一个有意义的名字,有利于后面我们进行安装该组件

新建一个projects文件夹/初始化一个vite项目

mkdir projects
// 进入到projects
cd projects
// 初始化一个vite项目
pnpm create vite
// 进入到项目(假设你起的项目名字是webOne)
cd webOne
// 安装依赖
pnpm i
// 启动项目
pnpm run dev

在projects文件夹下面另外初始化一个vite项目(和webOne同级目录)

// 初始化一个vite项目
pnpm create vite
// 进入到项目(假设你起的项目名字是webtwo)
cd webtwo
// 安装依赖
pnpm i
// 启动项目
pnpm run dev
  • 这样的目的是为了模拟多项目共用一个组件做的准备,当然你一个项目也是可以的

分别在webOne 和 webtwo项目中安装上面已经创建好的组件

pmpm install @lm/components

分别在webOne 和webtwo项目中引入该组件

<!--
 * @use: 
 * @description: webOne 和 webtwo 项目中 App.vue
 * @SpecialInstructions: 无
 * @Author: clearlove
 * @Date: 2023-06-16 11:29:30
 * @FilePath: /monorepoDemo/projects/webOne/src/App.vue
-->
<script setup>
import Button from '@lm/components'
</script>

<template>
 <Button/>
</template>

<style scoped>
</style>

  • 这样就达到了不同项目使用相同组件的功能,基本的架构就完成了,后面添加api的话,就继续新建一个api的文件夹,工具类的就新建一个utils的文件夹即可,这个按照实际需求进行架构的设计,截图看一下总的文件目录吧

在这里插入图片描述

怎么运行项目

运行项目其实就是分别运行即可,将projects下面的项目分别进行打包即可

pnpm run build

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

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

相关文章

深入理解Java虚拟机jvm-运行时数据区域(基于OpenJDK12)

运行时数据区域 运行时数据区域程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池直接内存 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的…

持续改进与创新:水库大坝安全管理方式

随着工业的快速发展&#xff0c;大坝建设已成为经济发展的重要部分。然而&#xff0c;由于自然环境的破坏以及人类因素的干扰&#xff0c;大坝的安全问题备受关注。每年都有不少大坝事故爆发&#xff0c;造成无法预估的损失。据统计&#xff0c;截至2006年我国共有3260座水库已…

【AntDB数据库】AntDB数据库跨地域多中心部署

跨地域多中心部署 **** 某省核心账务库案例 **** 通信行业核心业务系统已经与某款国外成熟商业数据库深度捆绑多年&#xff0c;为改变这一现状&#xff0c;实现数据库“自主可控”的目标&#xff0c;某省经过多轮调研选型与评测最终选择AntDB分布式内存数据库进行核心产生系统…

Linux线程同步(上)

文章目录 1. 同步的概念2. 条件变量函数2.1 等待函数2.2 样例 3. 生产者消费者模型4. 阻塞队列4.1 模拟阻塞队列的生产消费模型4.2 构造函数和析构函数4.3 生产接口和消费接口4.4 创建线程进行测试 1. 同步的概念 互斥可能会导致一个执行流长时间得不到某种资源。也叫饥饿问题…

健身房小程序怎么做?

如果把预约小程序用好了&#xff0c;会给你的场馆经营带来很多意想不到的好处&#xff0c;解决用户线上约客的问题&#xff0c;顶多只发挥了 20% 的作用&#xff0c;那另外 80% 的用法是什么呢&#xff1f; 高效推荐名片服务行业做的是口碑&#xff0c;用户靠的是转介绍&#x…

SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

SignalR快速入门 ~ 仿QQ即时聊天&#xff0c;消息推送&#xff0c;单聊&#xff0c;群聊&#xff0c;多群公聊&#xff08;基础》提升&#xff0c;5个Demo贯彻全篇&#xff0c;感兴趣的玩才是真的学&#xff09; 官方demo:http://www.asp.net/signalr/overview/getting-started…

超大模型如何实现3D WEB轻量化渲染?

Hoops Communicator是Tech Soft 3D旗下的主流产品之一&#xff0c;具有强大的、专用的高性能图形内核&#xff0c;专注于基于Web的高级3D工程应用程序。其由HOOPS Server和HOOPS Web Viewer两大部分组成&#xff0c;提供了HOOPS中的HOOPS Convertrer、Data Authoring的模型转换…

电脑提示msvcr120.dll丢失的解决方法win10,总共有三种,那个更方便

电脑修复经验分享&#xff0c;dll动态链接库文件丢失修复教程&#xff0c;DLL 文件&#xff0c;即动态链接库&#xff0c;也有人称作应用程序拓展。一种可执行文件&#xff0c;允许程序共享执行特殊任务所需的代码和其他资源。msvcr120.dll也是属于dll文件之一&#xff0c;在Wi…

python 面向对象 对象

类 构造函数 # 创建类 class Student:name None # 成员属性age None # 成员属性def say(self): # 成员方法print(self.name)# 构造函数def __init__(self,name,age):self.name nameself.age age#创建类对象 my_student Student() # 对象的属性 赋值 my_student.name …

Mysql数据库——用户管理与授权

Mysql数据库——用户管理与授权 一、登录用户的管理1&#xff0e;新建用户2&#xff0e;查看用户信息3&#xff0e;重命名用户4&#xff0e;删除用户5&#xff0e;修改当前登录用户密码6&#xff0e;修改其他用户密码7&#xff0e;忘记 root 密码的解决办法 二、数据库用户授权…

【Docker】Docker中Linux 容器、网络虚拟化与虚拟局域网的技术特点详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

Stream流学习前置知识之匿名内部类

目录 匿名内部类 概念 语法体 案例演示 匿名内部类 概念 没有名字的内部类 用于在程序中创建一个只使用一次的临时类 使用 new 关键字来创建一个对象&#xff0c;重写该类的方法或实现该类的接口 语法体 new 父类构造器或接口() {// 匿名内部类的定义 } 案例演示 T…

【深度学习】基于Qt的人脸识别系统,门禁人脸识别系统,Python人脸识别流程,树莓派

文章目录 人脸识别过程人脸检测人脸对齐人脸特征提取特征距离比对人脸识别系统 人脸识别过程 在深度学习领域做人脸识别的识别准确率已经高到超出人类识别&#xff0c;但综合考虑模型复杂度&#xff08;推理速度&#xff09;和模型的识别效果&#xff0c;这个地方还是有做一些…

网络安全大厂面试题合集+面试题文档

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者&#xff0c;从Chat2DB开源至今都有关注这个开…

计算机视觉重磅会议VAlSE2023召开,合合信息分享智能文档处理技术前沿进展

近期&#xff0c;2023年度视觉与学习青年学者研讨会 (Vision And Learning SEminar, VALSE) 圆满落幕。会议由中国人工智能学会、中国图象图形学学会主办&#xff0c;江南大学和无锡国家高新技术产业开发区管理委员会承办。超五千名专家学者、知名高校师生以及来自OPPO、华为、…

docker 容器的网络类型

目录 vmware的三种网卡模式&#xff08;网络模式&#xff09; docker里的四种网络类型 参考资料&#xff1a;Docker四种网络模式 - 简书 (jianshu.com) 1、桥接模式&#xff08;默认情况&#xff09; 2、host模式 3、none模式 4、container模式 创建桥接模式网卡 网卡…

TensorFlow Core—基本分类:对服装图像进行分类

现在人工智能很火的&#xff0c;看到了这篇文章&#xff0c;给自己普及一下基础知识&#xff0c;也分享给大家&#xff0c;希望对大家有用。 本指南将训练一个神经网络模型&#xff0c;对运动鞋和衬衫等服装图像进行分类。即使您不理解所有细节也没关系&#xff1b;这只是对完…

「FPGA」基本时序电路元件——锁存器和触发器

「FPGA」基本时序电路元件——锁存器和触发器 文章目录 「FPGA」基本时序电路元件——锁存器和触发器1. 最简单的双稳态元件2. SR锁存器3. D锁存器&#xff08;data latch&#xff09;4. D触发器5. 寄存器&#xff08;register&#xff09; FPGA是一种数字电路实现的方式&#…

算法设计与分析知识点整理

文章目录 前言一、算法的基本概念1.算法的基本特征2.算法设计需要满足的目标3.算法和程序的区别 二、时间复杂度计算1.大O表示法2.最坏和平均情况3.根据递归方程求解时间复杂度3.1 根据递归树求解3.2 根据主方法求解 三、六大算法1.分治法1.1 算法思路1.2 适用范围1.3 基本步骤…