简介
将大型代码库分成单独的独立版本化的软件包对于代码共享非常有用。但是,跨许多存储库进行更改很麻烦且难以跟踪,并且跨存储库的测试变得非常复杂。
为了解决这些(以及许多其他)问题,一些项目会将其代码库组织到多包存储库中(有时称为monorepos)。像Babel,React,Angular, Ember,Meteor,Jest等项目,以及许多其他项目,都在一个存储库中开发了所有软件包。
Lerna是一种工具,可以优化使用git和npm管理多包存储库的工作流程。
Lerna还可以减少开发和构建环境中大量软件包副本的时间和空间要求,这通常是将项目分成许多单独的NPM软件包的不利方面
入门
以下说明适用于Lerna3.x。对于新的Lerna项目,我们建议使用它而不是2.x。
首先,使用npm将Lerna安装为项目的开发依赖项。
$ mkdir lerna-repo && cd $ _
$ npx lerna init
这将创建一个lerna.json
配置文件以及一个packages
文件夹,因此您的文件夹现在应如下所示:
lerna-repo/
packages/
package.json
lerna.json
如何使用
Lerna允许您使用以下两种模式之一来管理项目:固定或独立。
固定/锁定模式(默认)
固定模式的Lerna项目在单个版本行上运行。版本位于密钥lerna.json
下项目根目录下的文件中version
。当您运行时lerna publish
,如果某个模块自上次发布以来已被更新,它将被更新为您要发布的新版本。这意味着您仅在需要时才发布软件包的新版本。
注意:如果您的主要版本为零,则所有更新均视为中断。因此,
lerna publish
以主要版本零运行并选择任何非预发行版本号将导致为所有软件包发布新版本,即使自上次发行以来并非所有软件包都已更改。
这是Babel当前使用的模式。如果要自动将所有软件包版本捆绑在一起,请使用此选项。这种方法的一个问题是,对任何软件包进行重大更改都会导致所有软件包都具有新的主要版本。

独立模式
lerna init --independent
独立模式Lerna项目允许维护者彼此独立地增加软件包的版本。每次发布时,都会提示您已更改的每个软件包,以指定是补丁,次要,主要还是自定义更改。
独立模式使您可以更具体地更新每个软件包的版本,并使一组组件有意义。将该模式与语义释放之类的东西相结合,将使其痛苦减轻。(已经在atlassian / lerna-semantic-release上对此进行了工作)。
设置
version
在关键lerna.json
要independent
在独立模式下运行。