案例
- 初始化项目
npm install -g pnpm
git init mono-repo
cd mono*
pnpm init
- 创建
pnpm-workspace.yaml
文件
packages: # 所有在 packages/ 子目录下的 package
- 'packages/**'
# 不包括在 test 文件夹下的 package
- '!**/test/**'
- 创建文件夹
packages/packagea
、packages/packageb
并初始化package.json
配置
# 自动
npm init -w ./packages/packagea -y
npm init -w ./packages/packageb -y
# 手动
mkdir packages
mkdir packages/packagea && cd packages/packagea && pnpm init
cd ../../
mkdir packages/packageb && cd packages/packageb && pnpm init
cd ../../
注意 npm init生成的包名会直接转换成小写,pnpm init不会
-
依赖安装、删除
全局安装依赖
pnpm add moment -w pnpm remove moment -w
子包安装依赖
# 1. 子目录中操作 cd packages/packagea pnpm add moment pnpm remove moment # 2. 根目录中操作 pnpm add lodash --filter packageb pnpm remove lodash --filter packageb
子项目间依赖
pnpm add packagea --filter packageb # 在子项目B中依赖最新版本的子项目A pnpm remove packagea --filter packageb # 在子项目B中不依赖最新版本的子项目A
-
运行脚本 运行根目录
package.json
脚本# 根目录中操作 pnpm test
运行子项目
package.json
脚本# 子项目中操作 pnpm test --filter packagea # 子项目中操作 cd packages/packagea pnpm test
运行每个packages中子包的
package.json
脚本pnpm test -r
-
发布
pnpm推荐使用版本控制工具changesets/Rush
这部分的实战代码后续会补上
-
安装
pnpm install @changesets/cli -w --save-dev
-
生成
changeset
相关文件pnpm changeset init
- changelog: changelog 生成方式
- commit: 不要让 changeset 在 publish 的时候帮我们做 git add
- linked: 配置哪些包要共享版本
- access: 公私有安全设定,内网建议 restricted ,开源使用 public
- baseBranch: 项目主分支
- updateInternalDependencies: 确保某包依赖的包发生 upgrade,该包也要发生 version upgrade 的衡量单位(量级)
- ignore: 不需要变动 version 的包
-
变更集
pnpm changeset # 或 pnpm changeset add
该命令将询问一系列问题,首先是您要发布的包,然后是每个包的semver bump类型,然后是整个变更集的摘要。在最后一步,它将显示它将生成的变更集,并确认您要添加它。
-
发布
pnpm changeset publish