在产生一个解决方案时,不可避免的会产生多个npm
包,以适配不同的用户群体,而这些包有可能互相之间又有依赖,管理起来,比较复杂,lerna
可以很容易的帮助我们管理多包
lerna 优劣
优势:
- 不需要在意各个子模块之间的依赖,
lerna
会帮你管理&发包 - 开发子模块不用在意开发环境的依赖,外层统一管理, 开发更便捷
- 不需要切换子模块来开发, 所有的子模块在同一项目
- 子模块之间开发相对来说也较为独立
- 自动修改依赖,提交,发布,并创建 tag
劣势:
- 仓库体积增长迅速,随着子模块的增多,仓库的体积会变得十分庞大
lerna 初始化
lerna init
修改 lerna.json
version 为 independent 表示各个子包独立管理版本
{
"packages": [
"packages/*"
],
"version": "independent",
"command": {
"bootstrap": {
"npmClientArgs": ["--hoist"]
}
}
}
可以使用 lerna link convert
将依赖提取到根,类似 yarn workspace
安装依赖
$ npm i # 安装项目全局依赖
$ lerna bootstrap # 安装所有子模块的依赖
$ lerna add {module} --scope={package} # 给某个模块添加一个依赖
$ lerna run start --scope={package} # 运行某个模块
举例
$ # 运行所有子模块
$ lerna run start
$ # 运行 antd 模块,注意 scope 后为包名,而非文件名
$ lerna run start --scope antd
$ # 添加 --stream 参数,在终端打印运行日志信息
$ lerna run start --scope antd --stream
卸载依赖
lerna exec -- <command> [..args] # 在所有包中运行该命令
//例子
lerna exec --scope=antd yarn remove webpack # 将 antd 包下的 webpack 卸载
删除安装依赖
lerna clean
查看包是否发生了变化
lerna updated/diff
查看本地所有包列表
lerna list
发布前查看哪些包发生了变化
lerna changed
lerna 发包
lerna publish
lerna version # 只把包提交到 git , 并不发布到 npm
出错重新发包
lerna publish from-git
lerna publish from-package
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。