Monorepo仓库管理策略之yarn workspaces

前言

工作区是一个通用术语,它支持在单个顶层根包中管理本地文件系统中的多个包, 工作区是一种设置包架构的新方法,从 Yarn 1.0 开始默认可用。它允许你以这样的方式设置多个软件包,只需运行 yarn install 一次即可一次性安装所有软件包。

什么是Monorepo?

Monorepo(单一仓库)是一种将多个相关项目的源代码存储在一个单一版本控制系统仓库中的策略。这种模式下,无论是微服务架构的后端服务,还是包含多个前端应用的大型项目,都可以共处一室,共享配置、依赖和工具链。Monorepo 的优势在于简化跨项目协作、代码复用、统一版本管理和 CI/CD 流程。然而,随之而来的是对版本控制系统的高效管理需求,以及如何处理大型仓库带来的构建速度问题。(后面会介绍)

为什么用它?

  • 你的依赖可以链接在一起,这意味着你的工作区可以相互依赖,同时始终使用最新的可用代码。这也是比 yarn link 更好的机制,因为它只影响你的工作区树而不是整个系统。

  • 所有项目依赖都将安装在一起,为 Yarn 提供更多自由度来更好地优化它们。

  • Yarn 将使用单个锁定文件,而不是为每个项目使用不同的锁定文件,这意味着更少的冲突和更容易的审查。

如何使用它?

创建 yarn-workspace , 执行yarn init -y ,初始化 package.json , 设置根项目的 package.json ,

{

    "private": true,
    "workspaces": [
      "packages/*" // 扫描packages目录,将项目纳入到workspace context中
    ]
}
  • private:根目录一般是项目的脚手架,无需发布,“private”: true会确保根目录不被发布出去。

  • workspaces:声明workspace中package的路径。值是一个字符串数组,支持Glob通配符。其中"packages/*"是社区的常见写法,package也可以用其他什么名字,只是常规就这么写

创建 packages文件夹,在 packages 下创建下面 两个文件夹, 分别在目录下执行 yarn init -y , 这样就能生成各自的 package.json

.
+-- node_modules
+-- yarn-lock.json
+-- package.json
`-- packages
   +-- v-cart`
   |   -- package.json
   `+-- v-user`
   |   -- package.json

在根目录执行 yarn workspaces info --json , 来查看结果,结果如下:
在这里插入图片描述

{
  "v-cart": {
    "location": "packages/v-cart",
    "workspaceDependencies": [],
    "mismatchedWorkspaceDependencies": []
  },
  "v-user": {
    "location": "packages/v-user",
    "workspaceDependencies": [],
    "mismatchedWorkspaceDependencies": []
  }
}

命令实例解释

命令模板:
yarn workspace <workspaceName> command <packageName> --xxx

  • workspaceName: 指项目的 package.jsonname
  • command: add ,removeupgraderun
  • packageName: 例如 lodash-es
  • --xxx: --dev , --peer 、 --optional

给项目添加包

// 给 v-cart 添加 lodash-es 包
yarn workspace v-cart add lodash-es --dev

// 运行 v-cart 的 dev 命令
yarn workspace v-cart run dev

全局操作(给顶层项目添加包)

1. 安装

yarn add rimraf  -W -D 

在这里插入图片描述

给每个包中添加 script

    "del" : "rimraf node_modules"

2. 执行所有包中的相同命令 del

yarn workspaces run del

3. 查看信息

yarn workspaces info --json

代码地址

git hub yarn_workspaces

总结:

现在我们的项目功能是,每个项目拥有自己的包(与主版本不同的),相同的版本包进行提升至根目录

现在项目的使用步骤

  • git clone 项目地址
  • yarn // 安装所有依赖
  • yarn workspace v-cart run dev // 运行具体命令
  • yarn workspaces run del // 删除所有工作区的node_module
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

子羽bro

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

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

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

打赏作者

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

抵扣说明:

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

余额充值