如何使用PNPM管理Monorepo项目?一站式提升开发效率的指南

随着前端开发项目的日益复杂化,Monorepo 的使用逐渐成为现代前端工程中的重要趋势。传统上,开发者们通常使用多个 Git 仓库来管理不同的项目,而 Monorepo 的理念则是将所有子项目集中在同一个 Git 仓库中进行管理,即所有的子项目都存放在根目录的packages目录下,简化协作和提高效率。PNPM 作为当前最快速且节省磁盘空间的包管理工具,在 Monorepo 项目管理中展现了其独特的优势。本文将深入探讨 PNPM 在 Monorepo 项目中的应用,从零开始构建高效的开发环境。

什么是 Monorepo?

Monorepo 是一种将多个项目或包文件放入同一个 Git 仓库进行管理的开发模式。其主要结构通常如下:

├── packages
|   ├── pkg1
|   |   ├── package.json
|   ├── pkg2
|   |   ├── package.json
├── package.json
├── pnpm-workspace.yaml

在 Monorepo 模式下,packages 目录下的每个子文件夹代表一个项目或包,这种方式的核心优势在于:

  • 代码复用:多个项目可以共享代码,避免重复开发。
  • 统一开发流程:所有项目在同一个 Git 仓库中,开发流程一致。
  • 高效管理:便于集中管理、发布和版本控制,尤其是对于多项目依赖的情况。

为什么选择 PNPM?

与常见的 Yarn 和 NPM 相比,PNPM 在 Monorepo 项目中展现了更多独特的优势:

  1. 安装速度极快:PNPM 采用非扁平的包结构,不使用yarn/npm复杂的扁平算法,并且仅更新发生变化的文件,极大提升了安装速度。
  2. 节省磁盘空间:PNPM 会将安装的包统一存放在磁盘的某个位置,项目中的node_modules通过hard-link的方式链接到实际的安装地址,有效减少磁盘占用。

这些优势使得 PNPM 成为管理 Monorepo 项目的不二选择,特别是在多个项目间需要频繁共享代码时,PNPM 的节省空间和高效安装能力尤为突出。

如何使用 PNPM 构建 Monorepo?

以下是使用 PNPM 管理 Monorepo 项目的步骤:

1. 初始化项目

在项目根目录下创建 package.json 文件,并初始化项目:

pnpm init

随后,新建一个名为 pnpm-workspace.yaml 的文件以及 packages 文件夹(用于存放各个子项目),这两者是 PNPM 管理 Monorepo 项目的固定格式。

2. 创建多个子项目

然后在你的packages 下可创建多个文件夹(一般一个项目代表一个文件夹),并分别初始化你的项目(就像平常构建项目一样构建、只不过是在packages 文件夹下面)

  • 分别初始化每个项目执行 pnpm init
  • 然后正常构建项目
# 初始化 pkg1 子项目
cd packages/pkg1
pnpm init

此时,每个项目的开发流程与普通项目无异,只是它们都位于同一个 Git 仓库中,便于集中管理。

3. 全局与局部安装依赖

在 Monorepo 中,可以选择在根目录下或具体的项目中安装依赖。在这里的项目打包我是用的 vite。

  • 在根目录安装vite(由于vite是两个项目都使用,可在根目录执行命令如下)
# 此处的 -w 正是因为 pnpm 本身支持monorepo。他代表其他项目共用这个包
pnpm i vite --save-dev -w 
  • 然后对于某个项目特定的包
pnpm --filter 具体项目文件名 add 包名

4. 如何统一或者单独在根目录下执行你的项目

  • 分别配置项目中的package.json(根目录下的除外)中的脚本如图所示(此处是 vite 配置)
"dev": "vite",
"build": "vite build",
  • 然后在根目录下安装一个包名为 concurrently 的包实现多个项目同时打包或运行
pnpm i concurrently --save-dev -w
  • 然后在根下的package.json中统一配置
{
  "scripts": {
    "dev:main": "pnpm -C ./packages/main run dev",
    "dev:plugins": "pnpm -C ./packages/plugins run dev",
    "build:main": "pnpm -C ./packages/main run build",
    "build:plugins": "pnpm -C ./packages/plugins run build",
    "dev": "concurrently \"pnpm dev:main\" \"pnpm dev:plugins\"",
    "build": "concurrently \"pnpm build:main\" \"pnpm build:plugins\"",
    "test": "echo \"Error: no test specified\" && exit 1"
  }
}

5. 公共代码管理

开发中可能有些公共代码,比如这两个项目可能业务一样,用到的后端接口之类的一样,其实就可以单独管理(此处就不具体演示,而是做一个demo)

  • 在packages下创建一个新的文件夹(即此处第三个项目文件夹、配置一样不变)
  • 然后在新建的项目的package.json中配置name为 根package.json中的name/当前项目的name(规范一下命名)
  • 最后在你想要使用的这个公共部分代码的项目中安装(此处举例: 根package.json中的name为 r,当前项目name为:libs)
pnpm i @r/libs --workspace

然后在需要使用这些公共代码的项目中,通过 import 进行引入即可。

PNPM 的独特功能:智能化管理与跨平台推广

PNPM 提供的智能化管理工具,进一步优化了 Monorepo 的开发体验。通过分组管理和自动提预算工具,开发者可以根据不同项目的需求,自动调整预算和资源分配,确保在项目的关键节点时,获得最大曝光。

此外,PNPM 还支持跨平台的推广方式,通过站内外联动的广告投放策略,将项目推广至更广泛的用户群体。无论是大型品牌还是中小型商家,PNPM 的全站推广工具能够帮助项目在双十一等大型促销活动中,精准触达目标用户,实现营销效果的最大化。

总结

在当今前端开发的复杂生态中,Monorepo 逐渐成为管理多个项目的主流方案,而 PNPM 则以其极高的安装速度和节省磁盘空间的优势,成为 Monorepo 项目管理的首选工具。通过本文的介绍,您可以轻松上手 PNPM,在多项目管理、依赖共享、自动化工具等方面显著提升开发效率。

如果您的团队正在管理多个前端项目,或者正在寻找一种更高效的开发流程,不妨尝试使用 PNPM 来构建您的 Monorepo。它不仅能帮助您节省时间和空间,还能让整个团队的开发工作变得更加顺畅。

延展阅读:

如何高效设计软件开发测试用例:解锁关键要点与实战技巧的疑问解答

MongoDB 4.0至7.0:这些主版本更新带来了哪些关键特性与性能飞跃?

电商平台客服工作台频繁卡顿怎么办?如何清理淘宝、京东、拼多多、抖音的缓存提升效率?

咨询方案 获取更多方案详情                        
(0)
研发专家-小瓦研发专家-小瓦
上一篇 2024年9月12日 下午6:08
下一篇 2024年9月13日 下午4:37

相关推荐