Monorepos管理工具
Lerna
一个快速、领先的构建系统,用于管理和发布来 自同一源码仓库的多个 JavaScript/TypeScript 软件包。
常见命令
命令 描述 npm install -g lerna 全局安装 npx lerna init 初始化一个 lerna 项目 npx lerna clean 删除各个包下的 node_modules ( 常用
)npx lerna bootstrap 安装依赖 ( v7之后被移除
)npx lerna link 链接互相引用的库 ( v7之后被移除
)npx lerna list [–scope= ] [–exclude= ] 列出本地软件包 npx lerna add [package] [–scope= ] [–exclude= ] 在所有包中添加依赖 npx lerna run [script] [–scope= ] [–exclude= ] 在每个工作区包中按拓扑顺序运行 npm script npx lerna exec [command] [–scope= ] [–exclude= ] 在每个工作区包中执行 shell
命令npx lerna publish [–no-git-tag-version] [–no-push] 发布每个已更改的 Workspace 包 ( 常用
)常见项目目录
1
2
3
4
5
6
7
8
9├── packages # 包目录
│ ├── package1 # 项目1
| | ├── xxx # 项目1 xxx
| | ├── package.json # 项目1 package.json
│ ├── package2 # 项目2
| | ├── xxx # 项目2 xxx
| | ├── package.json # 项目2 package.json
├── lerna.json # lerna 配置文件
├── package.json # 全局 package.jsonnode
版本较低时,lerna
+npm
是个不错的选择
Lerna-lite
Lerna-Lite is a super light version of the original Lerna (
Lerna-Lite 是 Lerna 的超级轻量版本
)常见命令
命令 安装 描述 cli npm install -g @lerna-lite/cli 必须先安装 CLI
如果之前安装过 lerna, 请先卸载 lerna,npm uninstall -g lerna
☁️ publish npm i @lerna-lite/publish -D 发布每个已更改的 Workspace 包 ( 常用
)📑 version npm i @lerna-lite/version -D 为每个工作区包创建新版本 🕜 changed npm i @lerna-lite/changed -D 列出自上次标记的版本以来更改的本地软件包 🌓 diff npm i @lerna-lite/diff -D git diff 自上次发布以来的所有软件包或单个软件包 👷 exec npm i @lerna-lite/exec -D 在每个工作区包中执行 shell
命令📖 list npm i @lerna-lite/list -D 列出本地软件包 🏃 run npm i @lerna-lite/run -D 在每个工作区包中按拓扑顺序运行 npm script ( 常用
)👓 watch npm i @lerna-lite/watch -D 监视包中的更改并执行命令 如果你想用
lerna
, 并且又不想要lerna
的全部命令(体积很大), 那么@lerna-lite/publish
与@lerna-lite/run
配合npm/yarn/pnpm workspaces
也是可以的常见项目目录
1
2
3
4
5
6
7
8
9├── packages # 包目录
│ ├── package1 # 项目1
| | ├── xxx # 项目1 xxx
| | ├── package.json # 项目1 package.json
│ ├── package2 # 项目2
| | ├── xxx # 项目2 xxx
| | ├── package.json # 项目2 package.json
├── lerna.json # lerna 配置文件
├── package.json # 全局 package.json
Yarn Workspaces
- 未实践过, 详情可参考 Monorepo 最佳实践之 Yarn Workspaces
pnpm Workspaces
常用命令
命令 描述 pnpm init 初始化项目 pnpm add 全局安装依赖 pnpm exec 全局执行 shell
命令pnpm -F 运行 package_selector
下的command
eg:pnpm -F app run dev
运行app
项目的dev
命令
eg:pnpm -F app add axios
为app
添加axios
依赖pnpm -r 运行 所有项目包
下的command
eg:pnpm -r app add axios
为所有项目添加axios
依赖pnpm -r exec rm -rf node_modules 递归删除所有项目 node_modules ( 常用
)pnpm publish 常常配置 changeset 使用, 实现跟 lerna publish
类似的效果常见项目目录
1
2
3
4
5
6
7
8
9├── packages # 包目录
│ ├── package1 # 项目1
| | ├── xxx # 项目1 xxx
| | ├── package.json # 项目1 package.json
│ ├── package2 # 项目2
| | ├── xxx # 项目2 xxx
| | ├── package.json # 项目2 package.json
├── pnpm-workspace.yaml # pnpm 配置文件
├── package.json # 全局 package.json
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小四先生的云!
评论