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 日

相关推荐

  • o3 发布了,摔碎了码农的饭碗

    大家好,我是汤师爷~ 在 2024 年底,OpenAI 发布了最新推理模型 o3。o3模型相当炸裂,在世界级编程比赛中拿下第 175 名,打败 99.9% 的参赛者。AI 写代码都赶上顶级程序员了,程序员是不是要失业? 最近不少读者反馈,像 GitHub Copilot、Claude Sonnet 3.5、Cursor 等 AI 辅助编程工具,能让代码编写效…

    2025 年 1 月 12 日
    16900
  • Java毕设项目:基于Springboot影视推荐网站系统设计与实现开题报告

    博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。 项目配有对应开发文档、开题报告、任务书、PPT等,提供毕业设计论文辅导。 项目都录了发布和…

    2025 年 1 月 6 日
    19100
  • Slurm HPC 集群安装 Slurm-web(python Flask开源项目)

    slurm-web,也称为 slurm-wlm-web,是为 Slurm 工作负载管理器提供的一个 Web 界面。Slurm 是一个用于管理大型和小型 Linux 集群的开源、容错且高度可扩展的集群管理和作业调度系统。slurm-web 的主要功能是提供一个方便用户监控和管理 Slurm 集群的途径,而无需直接使用命令行工具。 Slurm-web 在 Slu…

    2025 年 1 月 15 日
    25800
  • SpringBoot集成ECDH密钥交换

    简介 对称加解密算法都需要一把秘钥,但是很多情况下,互联网环境不适合传输这把对称密码,有密钥泄露的风险,为了解决这个问题ECDH密钥交换应运而生 EC:Elliptic Curve ——椭圆曲线,生成密钥的方法 DH:Diffie-Hellman Key Exchange ——交换密钥的方法 设计 数据传输的两方服务端(Server)和客户端(Client)…

    未分类 2025 年 1 月 6 日
    10700
  • chrome浏览器network如何查看上一个页面的请求

    前言 大家好,我是小徐啊。chrome浏览器是我们在JAVA开发中常用的浏览器,其中的console和network等,都是我们常用的功能。network中,是可以看到每次的请求的,包括请求的参数和返回的数据。但有时候,页面上请求之后,会有跳转的请求,导致看不到上一个页面的请求。其实,我们可以设置的,那么,该如何设置呢? 如何设置 首先,打开network的…

    2025 年 1 月 1 日
    18100

发表回复

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

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

关注微信