lerna 学习:前端多包管理方案
基于 Lerna 的 Monorepo 最佳实践
背景
- 很多的 npm 难以管理
- 每个 gitlab 要写 ci 比较麻烦
- 难以追踪修改
MonoRepo
- 在同一人 repo 中用多个 folder 来管理项目
Multiple Repos VS MonoRepo
优点
- 提升对代码的理解力
- 重用
- 简化依赖管理(aric: 这个特别好)
- 一致的 CI/CD
缺点
- 如果当中某些 folder 需要设置为 lever/private 权限,暂时无法做到
- 代码体积会增加很大
概念
- workspace: 放置分类 lerna package 的地方
- packages: 被管理的 js package 单位
- 可以作为一个独立的包
- lerna package 之间可以互相依赖
- lerna.json 主管理员
- package/**/package.json 各包的管理员
常用命令
- lerna ls:列出管理的包(private false 的情况)
- learn create: 创建项目里的包
- learn add (将一个package安装到另一个package里)
- lerna bootstrap: 与clean对应,会把东西重新安装回来
- lerna clean: 清理
- lerna exec “执行命令”
一个项目结构
├── README.md
├── lerna.json
├── package.json
├── packages
│ ├── site-predict-web-demo
│ ├── site-predict-web-internal
│ ├── site-predict-web-open-source
│ ├── site-predict-web-shared
│ └── websites
└── yarn.lock
新建 一个 lerna 项目
# 不同的包,用各自、独立的版本来管理
lerna init --independent
添加新项目 site-predict-web-demo
假设这个项目还没有被添加到
packages
中
lerna create -y site-predict-web-demo
列出项目中的 package
# 列出 private: false
lerna ls
# 列出所有
lerna ls -a
将一个包安装到另一个里
这个功能在项目里实际上是比较常用的。
lerna add @jswork/site-predict-web-shared packages/site-predict-web-demo