前言
在之前写的文章当中为什么我选择了pnpm?我提到了 pnpm 自带 monorepo 的解决方案,也说到了我从 yarn + lerna 的组合切换到了 pnpm ,那下面就说一下 如何使用 pnpm 极速搭建 monorepo。
使用 pnpm 极速搭建 monorepo
在项目中建立 workspace
先在项目根目录建立一个 pnpm 的 workspcae 配置文件 pnpm-workspace.yaml (官方说明),意味着这是一个 monorepo:
packages:
- 'packages/**'
创建 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,通过继承在不同的项目中使用
{
"extends": "./tsconfig.base.json"
}
Changesets
是一个用于 Monorepo 项目下版本以及 Changelog 文件管理的工具,目前一些比较火的 Monorepo 仓库都在使用该工具进行项目的发包例如 pnpm、mobx 等。我目前也在用。 可以看看这篇文章 在 pnpm 中使用 Changesets。
关于为什么不用 lerna
首先一点是它目前停止了维护 第二是对于新人来说,是否能快速上手 yarn+lerna 这一套配置很难说,而 pnpm 简单的配置我想还是没得说的 最后的原因,之前也说过 pnpm 的严格隔离,这是比较重要的一点,减少未知依赖的使用。
当然这是现在 monorepo 的通用方案,使用 yarn+lerna 肯定没问题的,我觉得各取所需吧