Lerna管理和发布同一源码仓库的多个js/ts包
一、基本概念
Lerna允许开发者在同一个源码仓库中开发多个软件包,这些软件包可以相互依赖,但又保持独立。这种管理方式对于提高工作效率、代码复用和版本控制大有裨益。
二、主要功能
- 公共依赖管理:Lerna可以管理多个软件包之间的公共依赖,避免重复安装和版本冲突。
- 内部链接:Lerna支持将相互依赖的软件包链接在一起,便于本地开发和测试。
- 版本控制:Lerna支持语义版本控制(SemVer),可以自动更新版本号并生成ChangeLog。
- 发布管理:Lerna可以一键发布多个软件包到npm或其他包管理器,支持独立发布和全体发布。
三、工作模式
Lerna有两种主要的工作模式:
- Fixed/Locked Mode(固定/锁定模式):在这种模式下,所有软件包都共享相同的版本号。这适用于那些希望保持高度一致性的项目。
- Independent Mode(独立模式):在这种模式下,每个软件包都有自己的版本号。这适用于那些希望独立管理每个软件包版本的项目。
四、常用命令
Lerna提供了丰富的命令行工具,方便开发者进行项目管理。以下是一些常用的命令:
- lerna init:初始化Lerna项目,创建lerna.json配置文件。
- lerna create:创建一个新的子包。
- lerna add:安装依赖到指定的子包中。
- lerna list:列出当前项目中的所有子包。
- lerna link:将所有相互依赖的包符号链接在一起。
- lerna exec:在每个包中执行任意命令。
- lerna run:在每个包中运行npm脚本(如果该包中存在该脚本)。
- lerna clean:删除各个包下的node_modules目录。
- lerna bootstrap:安装所有外部依赖项,链接相互依赖的包,并执行npm run prepublish和npm run prepare脚本。
- lerna publish:发布新的库版本,支持独立发布和全体发布。
五、优势与特点
- 高效管理多包项目:Lerna让维护多个相关但分离的包变得简单。
- 并行构建加速:通过并行处理构建任务,显著提升构建速度。
- 智能版本控制:支持语义版本控制策略,自动化版本更新和ChangeLog生成。
- 无缝链接与Bootstrap:本地快速链接库,便于开发期间的实时测试。
- 强大命令行工具:直观的命令行界面,易于学习和使用。
- 社区与文档丰富:活跃的社区支持和详尽的官方文档,确保快速上手和问题解决。
六、应用场景
Lerna广泛应用于微前端、库的开发、大型单页应用(SPA)或企业级后端服务等领域。通过Lerna,开发者可以将复杂的项目结构清晰化,每个子模块都能独立发展和部署,而整体又能协调一致。
综上所述,Lerna是一个功能强大、易于使用的JavaScript/TypeScript项目管理工具,它极大地简化了多包项目的管理和发布流程。无论是初创项目还是成熟的企业级应用,Lerna都能够提供强大的支撑。