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

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的搭建,后面会根据项目拓展增加需要注意的点!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黒客与画家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值