vue3 + pnpm 打造一个 monorepo 项目

单一仓库与多仓库架构

单一仓库(Monorepo)架构是一种策略,它允许我们在一个单一的仓库中管理多个项目或包;而多仓库(Multirepo)架构则是将每个项目分别存放在不同的仓库中。

在Monorepo结构中,除了根目录下有一个公共的package.json文件外,每个子项目(sub-package)也有自己的package.json文件。

子项目之间可以通过在package.json中定义的name属性相互引用,从而保持各自的独立性。

# 单一仓库目录结构示例
monorepo-demo
├── packages
│   ├── module-a
│   │   ├── src             # 模块A的源代码
│   │   ├── node_modules    # 模块A的依赖库
│   │   └── package.json    # 模块A的依赖配置
│   └── module-b
│       ├── src             # 模块B的源代码
│       └── package.json    # 模块B的依赖配置
├── .eslintrc             # 整个项目的配置文件
├── node_modules          # 所有子项目的公共依赖库
└── package.json          # 所有子项目的公共依赖配置

相比之下,Multirepo架构倾向于将每个项目隔离在不同的仓库中,每个项目都有自己的package.json文件来管理依赖。

# 多仓库项目A目录结构
multirepo-a
├── src
├── .eslintrc                
├── node_modules             
└── package.json   

# 多仓库项目B目录结构
multirepo-b
├── src
├── .eslintrc                
├── node_modules             
└── package.json

单一仓库工具

在采用单一仓库架构的软件开发中,选择合适的工具对于管理大规模代码库、提升团队协作效率以及优化构建和部署流程至关重要。

截至2024年,前端领域中流行的Monorepo工具包括Pnpm WorkspacesYarn Workspacesnpm WorkspacesRushTurborepoLernaYalcNx

强烈推荐使用Pnpm Workspaces作为单一仓库项目的依赖管理工具。

那么,单一仓库与包管理工具(npm、yarn、pnpm)之间的关系是怎样的呢?

这些包管理工具能够为单一仓库提供依赖安装和依赖管理的支持。通过它们对workspace的支持,允许在单一仓库中的不同子项目之间共享依赖项,并提供一种管理这些共享依赖项的方法。这可以简化依赖项管理和构建过程,并提高开发效率。

单一仓库项目搭建

背景

传统的多仓库模式通常意味着每个项目都需要一个独立的仓库。例如,如果你有三个项目,就需要创建三个远程仓库,并且需要为每个项目单独安装和升级依赖。

而单一仓库模式则是在一个仓库中管理多个项目,这些项目可以是独立的,也可以相互依赖。通过这种方式,多个项目可以共享依赖。例如,如果多个项目都需要lodash,那么只需要安装一次即可。

pnpm i lodash -w

当然,在单一仓库中,除了公共的package.json依赖外,每个子项目也会有自己的私有package.json依赖。

我们选择Pnpm Workspaces作为单一仓库项目的依赖管理工具,接下来一起搭建一个单一仓库项目。

安装包管理工具

全局安装pnpm。

npm i pnpm -g

初始化项目

创建一个新的项目目录pnpm-monorepo,在根目录运行pnpm init创建package.json文件。

然后在根目录新建一个packages文件夹,用于存储子项目。

新建packages/libc-shared(共享包),用于存放多个项目或组件之间共享的代码。运行pnpm init创建package.json文件,package.jsonname字段修改为"@libc/shared";将package.jsonmain入口文件路径字段修改为"src/index.js"

{
  "name": "@libc/shared",
  "version": "1.0.0",
  "main": "src/index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
}

新建packages/libc-ui(公共组件包),即UI组件库,这里我们直接克隆了iview-ui-plus代码。运行pnpm install安装依赖,**将package.jsonname字段

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/4308.html

(0)
LomuLomu
上一篇 2024 年 12 月 24 日
下一篇 2024 年 12 月 24 日

相关推荐

  • 基于Java的大疆无人机云端控制开发指南

    欢迎来到技术探索者的开发空间更多精彩内容请访问我的技术博客 开发者笔记-CSDN博客目录前言开发准备工作搭建开发环境注册大疆开发者账户获取大疆开发工具包大疆SDK深度解析SDK分类与特性云端API运行机制Java控制无人机实战工程创建与依赖配置认证信息设置设备连接流程飞行指令实现影像系统操作示例代码与场景应用完整控制程序行业应用实例疑难问题解答连接异常处理编…

    2025 年 5 月 15 日
    1.0K00
  • Java网络通信实践:UDP协议下的套接字编程指南

    网络通信基础 在网络应用开发中,主要涉及两个关键角色:请求方(客户端)和服务提供方(服务器)。请求方向服务端发起操作指令,服务端接收并处理这些指令后,将处理结果返回给请求方。开发人员通常关注应用层和传输层的实现。我们编写的程序属于应用层范畴,需要借助传输层提供的接口完成数据传输。Java语言为开发者提供了两套网络通信接口:基于UDP协议的和基于TCP协议的。…

    2025 年 5 月 13 日
    40100
  • spring的三级缓存

    spring的三级缓存: Spring 容器的“三级缓存” Spring 容器的整个生命周期中,单例Bean对象是唯一的。即可以使用缓存来加速访问 Spring 源码中使用了大量的 Cache 手段,其中在循环依赖问题的解决过程中就使用了“三级缓存” 三级缓存的意义 singletonObject:一级缓存,存放完全实例化且属性赋值完成的 Bean ,可以直…

    未分类 2025 年 1 月 6 日
    48300
  • ChatGPT Plus订阅失败国内代充方法

    ChatGPT Plus订阅失败后,国内用户可用的排查步骤和代充处理方法。

    未分类 2026 年 5 月 18 日
    5600
  • 『玩转Streamlit』–查看K线的小工具

    在金融市场分析中,查看不同交易对的 K 线数据是一项基础且重要的工作。 今天,我们就来学习如何使用 Streamlit 构建一个简单的 K 线查看小工具,让你能够方便地查看不同交易对在不同时间范围内的 K 线数据。 1. 环境准备 首先,确保已经安装了必要的库。 除了 Streamlit 用于构建界面,还需要pandas 用于数据处理,plotly 用于绘制…

    2025 年 1 月 15 日
    81000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信