lerna用于管理多package,且各package可能会互相引用的项目。
lerna通过两种方式管理子项目的版本号
- Fixed/Locked mode (default):每次执行
lerna publish都会将所涉及到的包升级到最新一个版本,开发者只需要确定发布下一个version。 - Independent mode:由开发者自行管理子项目的
version,每次执行lerna publish都需要确定每个包的下个版本号。
基本使用
以下命令以yarn为主。
Install 安装
yarn global add lerna
Init 初始化项目
lerna init 命令执行完毕后,会在生成对应的目录结构。
lerna-repo/
package.json
lerna.json
packages/
package-1/
package.json
package-2/
package.json
复制代码
Lerna.json 配置
{
"version": "1.1.3", // 项目版本
"npmClient": "npm", // 默认使用的npm,可改为yarn
"command": { // lerna 内置命令的配置
"publish": {
"ignoreChanges": ["*.md", "**/test/**",], // 发布时忽略部分文件的改动,配置此项可以减少不必要的publish。
"message": "chore(release): publish" // git commit message
},
},
"packages": ["packages/*"]
}
复制代码
Create 创建子项目
lerna create <name> 创建一个子项目,并会根据交互提示生成对应的package.json
Add 添加依赖
lerna add <package>[@version] [--dev] [--exact]
lerna add eslint: 所有包都会装上eslint。lerna add eslint --scope=package1:只有package1会装上。lerna add eslint packages/prefix-*:符合prefix的包会装上。
options:
-dev:添加到devDependencies--exact: 只安装特定版本
如果添加的是子项目,则会通过link软连接到对应的项目中。 lerna add package1 --scope=package2
Run 执行npm script命令
lerna run <script> -- [..args]
lerna run test:则会执行所有子项目中的test。lerna run --scope package1 test:只执行package1中的test。lerna run --ignore package-* test:只执行除了匹配package-*外的项目中的test
Exec 执行任意命令
lerna exec -- <command> [..args]
与lerna run类似,只不过它可以执行任意命令。 eg: lerna exec -- rm -rf ./node_modules
其他命令
lerna bootstrap:安装各子项目依赖,对相互引用的项目进行软连接,在子项目中执行npm run prepublish和npm run prepare--hoist [glob]:会将子项目的匹配的依赖(eg:eslint,jest等),统一放在根目录的node_modules中,减少安装时间,但仅限npmClient=npm—nohoist [glob]: 匹配的依赖(eg:babel)会安装到子项目中的node_modules中
lerna clean:删除子项目的node_moduleslerna link:同bootstrap第二步。
进阶使用
Lerna-changelog
lerna-changelog基于pr来为项目生成changelog
可参考repo
使用步骤
- 从
master分支切换出feature/bugfix等分支,参考git-flow。 - 完成开发后进行
commit,推荐使用commitizen来规范commit msg,同时有助于对后续子项目生成changelog。 - 将新分支
push到remote端。 - 创建
pr,并打上label,此处一定要打上label,learn-changelog就是根据label来确定该pr属于feature/bugfix/document等。 - 切记要在
merge之前打上label。 - 进行
merge pr操作。 - 本地切换到
master分支并进行pull操作。 - 执行
lerna-changelog,既可得到一份changeling。
注意
pr的label并不能随意设置,一定要在项目中声明对应才生效。
官方默认支持breaking/enhancement/bug/documentation/internal,如果想用其他,则需要在package.json中进行相应的配置。
{
"changelog": {
"labels": {
"feat": ":rocket: New Feature",
"bug": ":bug: Bug Fix",
"doc": ":memo: Documentation",
"internal": ":house: Internal",
"breaking": ":boom: Breaking Change"
}
}
}
复制代码
子项目的changelog
尚未实践过,具体还需参考README
结语
lerna的使用已介绍完毕,上述内容可满足日常开发需求,更多详情还需参考官方文档。
Lerna是一款用于管理包含多个package的大型项目工具,尤其适用于各package间存在依赖关系的情况。它提供固定和独立模式管理版本,简化了依赖管理和发布流程。本文详细介绍了Lerna的基本使用方法,包括安装、初始化、配置、创建子项目、添加依赖、执行脚本等,以及高级用法如生成变更日志。
1465

被折叠的 条评论
为什么被折叠?



