lerna 学习:前端多包管理方案

基于 Lerna 的 Monorepo 最佳实践
更新于: 2022-06-13 02:56:20

背景

  • 很多的 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 “执行命令”
lerna.json

一个项目结构

├── 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
# 不同的包,用各自、独立的版本来管理
lerna init --independent

添加新项目 site-predict-web-demo 

假设这个项目还没有被添加到 packages

lerna create
lerna create -y site-predict-web-demo

列出项目中的 package

lerna ls
# 列出 private: false
lerna ls
# 列出所有
lerna ls -a

将一个包安装到另一个里

这个功能在项目里实际上是比较常用的。

lerna add 添加包之间的依赖
lerna add @jswork/site-predict-web-shared packages/site-predict-web-demo

参考