使用 pnpm 搭建 monorepo 项目

引言

在我之前的开发经历中,并没有实际使用过 Monorepo 管理项目,尽管之前对此有所了解,但并未深入探究。然而,如今许多开源项目都采纳了 Monorepo 方式,对于不熟悉它的开发者来说,阅读和理解这些项目的源码可能会相对困难。所以,我近期简单研究了一下使用 PNPM 搭建 Monorepo 项目的方法。

什么是 Monorepo?

在软件开发中,随着项目的逐渐庞大和复杂化,管理多个相关联的代码库就变成了一项挑战。这时,Monorepo(单体代码仓)应运而生,它能有效管理多个项目或模块。

Monorepo 是指在一个单一的版本控制系统仓库中管理多个模块/项目的策略。相对于多仓库(Multirepo),它能带来以下好处:

  • 统一的工作流程和工具链:整个仓库的项目可以共享构建,测试,部署等流程。
  • 更容易的代码共享和重用:不同项目之间共享代码变得直接和高效。
  • 依赖管理:确保各个模块间依赖的版本一致性。
  • 原子性提交和版本控制:可以在单个提交中跨多个项目进行更改,简化版本跟踪。

解决的问题

Monorepo 管理方式解决了如下问题:

  • 跨项目的改动困难:更改核心库需要在多个仓库中手动更新。
  • 版本不一致:不同项目可能因为未及时更新依赖而导致的版本冲突。
  • 流程复杂化:多个代码仓可能意味着重复配置多个 CI/CD 流程。
  • 团队协作问题:不同的项目分属不同的仓库,增加了团队之间沟通的工作量。

使用 pnpm 搭建 Monorepo

第一步:安装 pnpm

在终端执行以下命令安装 pnpm:

npm install -g pnpm

第二步:初始化仓库

创建一个新文件夹作为 Monorepo 的根目录,并初始化仓库:

mkdir my-monorepo
cd my-monorepo
pnpm init

第三步:创建工作空间配置文件

在根目录下创建 pnpm-workspace.yaml 文件来配置工作区:

  • packages 是一个路径的数组,用来指定包含工作区包的目录。
  • 通常子项目会统一放在 <root>/packages/** 目录下
  • 当然这个目录名称也可以随喜好定义,一般会命名为 packages
  • packages 可以指定多个目录
packages:
  - 'packages/*'

第四步:添加子项目

在 packages 文件夹下创建子项目,并进行初始化:

mkdir packages/project-a
cd packages/project-a
pnpm init -y

下面是一个有多个包的目录结构的演示:

第五步:添加依赖

使用 pnpm 的 pnpm add 命令在子项目中添加依赖:

cd packages/project-a
pnpm add lodash

第六步:跨项目依赖

方法1:

如果 project-a 依赖于 project-b,可以直接执行命令操作:

cd packages/project-a
pnpm add project-b

方法二:

或者直接编辑 project-a 项目的 package.json

{
  "name": "project-a",
  // ...
  "dependencies": {
    // 添加 project-b , 指定为 `workspace:*`
    "project-b": "workspace:*",
    "project-c": "workspace:*"
  }
}

添加好后,执行 pnpm install 即可。

pnpm install

第七步:构建和运行

在根目录下,使用 pnpm 运行命令(比如测试)针对所有项目:

pnpm recursive run test

# -r 是 recursive 的命令缩写:
pnpm -r run test

例如,我在所有 package 下都加了 print 命令,然后在根目录执行 pnpm -r run print

常见的 Monorepo 解决方案

除了 pnpm,还有其他几种流行的 Monorepo 管理工具:

  • Lerna:最受欢迎的 Monorepo 管理工具之一,提供了版本管理与发布的功能。
  • Yarn Workspaces:Yarn 的多包管理功能,利用 Yarn 的快速,安全的包管理优势。
  • Rush:用于大型 Monorepo 的构建工具,提供了高级的包管理和构建缓存功能。

结语

通过上述步骤,我们可以看出来使用 pnpm 搭建 monorepo 项目非常简单,不需要额外引入其他依赖即可完成 monorepo 仓库的搭建。

相关资料

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
使用pnpm创建React项目的步骤如下: 1. 首先,确保已经安装了pnpm。可以使用以下命令在全局安装pnpm: ```npm install pnpm -g``` 2. 设置npm的registry为taobao代理的registry,这样可以加快安装包的速度。可以使用以下命令进行设置: ```npm config set registry https://registry.npm.taobao.org``` 3. 使用pnpm创建React项目的package.json文件。可以在终端中输入以下命令: ```pnpm init react-app my-app``` 其中,my-app是你想要创建的项目名称。 4. 进入项目目录。在终端中输入以下命令: ```cd my-app``` 其中,my-app是你创建的项目名称。 5. 安装项目所需的依赖包。在终端中输入以下命令: ```pnpm install``` 至此,你已经成功使用pnpm创建了React项目。你可以开始开发你的React应用了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【前端】node、npm、pnpm部署react项目过程中问题记录](https://blog.csdn.net/weixin_42369773/article/details/130652886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [(二)使用npm搭建React项目](https://blog.csdn.net/wangyanlong0107/article/details/84884834)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值