快速开始
monorepo:单个代码库中许多不同应用和包的集合。
polyrepo:分别发布和版本控制的多个代码库。
在
polyrepo设置中,在应用程序之间共享代码的过程相对较长。假设有三个单独的存储库:app、docs和shared-utils。app和docs都依赖于shared-utils,shared-utils作为包发布在npm上。 假设shared-utils中的错误导致app和docs中出现严重问题。您需要:在
shared-utils中提交修复错误在共享实用程序中运行发布任务以将其发布到
npm在
app中提交,升级shared-utils依赖项的版本在
docs中提交,升级shared-utils依赖项的版本app和docs现已准备就绪,可以部署。
在
monorepo设置中,shared-utils将与app和docs位于同一代码库中。这使得过程非常简单:在
shared-utils中提交修复错误app和docs现已准备就绪,可以部署。
初始化项目
# 创建一个新目录并进入
mkdir monorepo && cd monorepo
# 初始化
pnpm init2
3
4
5
创建 workspace
在项目根目录中新建 pnpm-workspace.yaml,并指定子包,例如:
packages:
# 子目录 packages/ 中的所有包
- 'packages/*'
# 排除 test 目录的包
- '!**/test/**'2
3
4
5
构建 package 产物
项目根目录下执行 pnpm run build 来对每个子包进行构建:
{
"scripts": {
"build": "pnpm -r run build"
}
}2
3
4
5
6
加入
-r是指定为workspace中的子包执行build命令。默认情况下,
pnpm会根据子包的依赖拓扑排序,按顺序对子包执行命令,以避免在构建某个包的时候,出现子依赖的构建产物未生成的问题,进而引发比如类型错误等问题。另外如果两个子包没有依赖关系,pnpm会并发进行构建。
监听 package 变更
在项目根目录下执行 pnpm run watch,以对每个子包执行 watch 命令监听文件的变更以生成最新的构建产物:
{
"scripts": {
"watch": "pnpm --parallel -r run watch"
}
}2
3
4
5
加入
-r是指定为workspace中的子包执行watch命令。watch命令是会长时间运行监听文件变更,进程不会自动退出(除了报错或者手动退出),因此需要加上--parallel告诉pnpm运行该脚本时完全忽略并发和拓扑排序。