使用 pnpm 极速搭建 monorepo 项目

1,538 阅读2分钟

前言

在之前写的文章当中为什么我选择了pnpm?我提到了 pnpm 自带 monorepo 的解决方案,也说到了我从 yarn + lerna 的组合切换到了 pnpm ,那下面就说一下 如何使用 pnpm 极速搭建 monorepo。

使用 pnpm 极速搭建 monorepo

在项目中建立 workspace

先在项目根目录建立一个 pnpm 的 workspcae 配置文件 pnpm-workspace.yaml (官方说明),意味着这是一个 monorepo:

packages:
  - 'packages/**'

image.png

创建 packages ,将子项目移入 packages

这时候可以创建 packages 目录,将子项目移入 packages 中,再用 pnpm install 安装依赖即可,即可看到子项目的依赖都是通过软链接过去的

创建 script 启动服务

在 packagejson 中直接写个 dev 跑所有的服务

"scripts": {
    "dev": "pnpm -r --filter ./packages --parallel run dev",
}

这代表跑 dev 会将会跑起子项目所有的 dev 命令,parallel模式可以看这里

恭喜你,已经使用 pnpm 搭建完 monorepo 项目了

额外

一些共同配置

比如 tsconfig ,可以在根目录中写一个base,通过继承在不同的项目中使用 image.png

{
  "extends": "./tsconfig.base.json"
}

Changesets

是一个用于 Monorepo 项目下版本以及 Changelog 文件管理的工具,目前一些比较火的 Monorepo 仓库都在使用该工具进行项目的发包例如 pnpm、mobx 等。我目前也在用。 可以看看这篇文章 在 pnpm 中使用 Changesets

关于为什么不用 lerna

首先一点是它目前停止了维护 第二是对于新人来说,是否能快速上手 yarn+lerna 这一套配置很难说,而 pnpm 简单的配置我想还是没得说的 最后的原因,之前也说过 pnpm 的严格隔离,这是比较重要的一点,减少未知依赖的使用。

当然这是现在 monorepo 的通用方案,使用 yarn+lerna 肯定没问题的,我觉得各取所需吧