# 简介
lerna 是 GitHub 上面开源的一款 js 代码库管理软件, 用来对一系列相互耦合比较大、又相互独立的 js git 库进行管理。
# 基础
npm i -g lerna # 安装
lerna init # 一个目录下初始化
1
2
2
安装之后目录
packages/ # 保存多包的目录
package.json
lerna.json
1
2
3
2
3
# 管理模式
使用 lerna 管理项目时,可以选择两种模式。
# 固定模式
默认的为固定模式(Fixed mode),当使用 lerna init 命令初始化项目时,就默认为固定模式,也可以使用 lerna init --independent 命令初始化项目,这个时候就为独立模式(Independent mode)。 固定模式中,packages 下的所有包共用一个版本号(version),会自动将所有的包绑定到一个版本号上(该版本号也就是 lerna.json 中的 version 字段),所以任意一个包发生了更新,这个共用的版本号就会发生改变。
# 独立模式
独立模式允许每一个包有一个独立的版本号,在使用 lerna publish 命令时,可以为每个包单独制定具体的操作,同时可以只更新某一个包的版本号。此种模式时,lerna.json 中的 version 字段指定为independent
即可。
# lerna.json 解析
{
"version": "1.1.3",
"npmClient": "npm",
"command": {
"publish": {
"ignoreChanges": ["ignored-file", "*.md"]
},
"bootstrap": {
"ignore": "component-*",
"npmClientArgs": ["--no-package-lock"]
}
},
"packages": ["packages/*"]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
- version , 当前库的版本
- npmClient , 允许指定命令使用的 client, 默认是 npm, 可以设置成 yarn
- command.publish.ignoreChanges , 可以指定那些目录或者文件的变更不会被 publish
- command.bootstrap.ignore , 指定不受 bootstrap 命令影响的包
- command.bootstrap.npmClientArgs , 指定默认传给 lerna bootstrap 命令的参数
- command.bootstrap.scope , 指定那些包会受 lerna bootstrap 命令影响
- packages , 指定包所在的目录
# 常用命令
# lerna publish
发布新的库版本
lerna publish # 发布最新commit的修改
lerna publish <commit-id> # 发布指定commit-id的代码
1
2
2
# lerna version
- 识别出修改的包
- 创建新的版本号
- 修改 package.json
- 提交修改 打上版本的 tag
- 推送到 git 上
# lerna bootstrap
- 为每个包安装依赖
- 链接相互依赖的库到具体的目录
- 执行 npm run prepublish
- 执行 npm run prepare
# lerna list
列举当前 lerna 库包含的包
# lerna changed
显示自上次 relase tag 以来有修改的包
# lerna diff
显示自上次 relase tag 以来有修改的包的差异, 执行 git diff
# lerna exec
在每个包目录下执行任意命令
lerna exec -- rm -rf ./node_modules # 删除每个目录下的node_modules
1
# lerna run
执行每个包 package.json 中的脚本命令
# lerna init
创建一个新的 lerna 库或者是更新 lerna 版本
- 修改 package.json 中 lerna 版本
- 创建 lerna.json
# lerna add
添加一个包的版本为各个包的依赖
# lerna clean
删除各个包下的 node_modules
# lerna import
导入指定 git 仓库的包作为 lerna 管理的包
lerna import <path-to-external-repository>
1
# lerna link
链接互相引用的库
# lerna create
新建包
lerna create <name>
1