1. monorepo、lerna是什么?
Monorepo
是管理项目代码的一个方式,指在一个项目仓库 (repo) 中管理多个模块/包 (package),不同于常见的每个模块建一个 repo。
Lerna
是一种Monorepo
的解决方案
Lerna
是一个用来优化托管在 git\npm 上的多 package 代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。
2.优缺点
优点
- 1.节约了大量存储空间。
- 比如多个项目都依赖Vue,Vue-route等包,在多个仓库的项目下,node_modules会出现大量的冗余。
- 2.调试方便
- 在多个仓库的项目下,调试依赖的包是通过npm link,使用Lerna不需要了
- 3.资源包升级问题
- 一个项目依赖了多个 npm 包,当某一个子 npm 包代码修改升级时,都要对主干项目包进行升级修改。(这个问题感觉是最烦的,可能一个版本号就要去更新一下代码并发布)
缺点 :
- 由于源码在一起,仓库变更非常常见,存储空间也变得很大,甚至几G,CI 测试运行时间也会变长
3.使用方法
- 1.安装 lerna 工具
npm install lerna -g
复制代码
- 2.初始化一个lerna 项目
mkdir lerna-demo
cd lerna-demo
lerna init
复制代码
生成如下文件:
- packages(目录)
- lerna.json(配置文件)
- package.json(工程描述文件)
复制代码
- 3.常用命令
lerna init //初始化 lerna 项目 lerna create <name> //创建一个新的由 lerna 管理的包 lerna bootstrap // 安装所有依赖项并连接所有的交叉依赖 lerna add axios // 增加模块包到最外层的公共 node_modules中 lerna add a --scope=b // 增加模块包到 packages 中指定项目 下面是将 a 模块增加到 b 项目中 lerna exec --scope a -- yarn start //在 packages 中对应包下的执行任意命令 下面的命令,是对 packages 下的 a 项目执行 yarn start 命令 ,比较常用,可以把它配置到最外层的 package.json 中 如果命令中不增加 --scope a 直接使用下面的命令,这会在 packages 下所有包执行命令rm -rf ./node_modules lerna exec -- rm -rf ./node_modules lerna list // 显示所有的安装的包。等同于 lerna ls lerna clean // 从所有包中删除 node_modules 目录。不会删除项目最外层的根 node_modules lerna publish // 在当前项目中发布包。lerna publish 永远不会发布标记为 private 的包(package.json中的”private“: true) 复制代码
4.应用(适用场景)
- 从零搭建一个 平台基础组件库项目
- 框架类项目(比如:vue3源码)
- 公司组件库项目
- 工具类项目(比如 :babel、facebook/jest、alibaba/rax)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END