Lerna logo

Lerna 是一个管理工具,用于管理包含多个软件包(package)的 JavaScript 项目。

Follow Lerna on Twitter

关于

将大型代码仓库分割成多个独立版本化的 软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且, 跨越多个代码仓库的测试将迅速变得非常复杂。

为了解决这些(以及许多其它)问题,某些项目会将 代码仓库分割成多个软件包(package),并将每个软件包存放到独立的代码仓库中。但是,例如 Babel、 React、Angular、Ember、Meteor、Jest 等项目以及许多其他项目则是在 一个代码仓库中包含了多个软件包(package)并进行开发。

Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化


入门

首先使用 npm 将 Lerna 安装到全局环境中:

推荐使用 Lerna 2.x 版本。

npm install --global lerna

接下来,我们将创建一个新的 git 代码仓库:

git init lerna-repo && cd lerna-repo

现在,我们将上述仓库转变为一个 Lerna 仓库:

lerna init

你的代码仓库目前应该是如下结构:

lerna-repo/
  packages/
  package.json
  lerna.json

命令

以下是每个命令的简要介绍。 请访问 README 文件以获取更多详细信息。

lerna init

常见一个新的 lerna 仓库(repo)或将现有的仓库升级为适配当前 版本的 Lerna。

参数

--independent/-i – 使用独立的 版本控制模式。

lerna bootstrap

在当前 Lerna 仓库中执行引导流程(bootstrap)。安装所有 依赖项并链接任何交叉依赖。

此命令至关重要,因为它让你可以 在 require() 中直接通过软件包的名称进行加载,就好像此软件包已经存在于 你的 node_modules 目录下一样。

lerna import <pathToRepo>

将本地路径 <pathToRepo> 中的软件包导入(import) packages/<directory-name> 中并提交 commit。

lerna publish

为已经更新过的软件包创建一个新版本。提示 输入新版本号并更新 git 和 npm 上的所有软件包。

参数

--npm-tag [tagname] — 使用给定的 npm dist-tag (默认为 latest)发布到 npm。

--canary/-c – 创建一个 canary 版本。

--skip-git – 不要运行任何 git 命令。

--force-publish [packages] — 强制发布 指定的一个或多个软件包(以逗号分隔)或使用 * 表示所有软件包(对于修改过的软件包跳过 git diff 检查)。

lerna changed

检查自上次发布以来哪些软件包被修改过。

lerna diff [package?]

列出所有或某个软件包自上次发布以来的修改情况。

lerna run [script]

在每一个包含 [script] 脚本的软件包中运行此 npm 脚本

lerna ls

列出当前 Lerna 仓库中的所有公共软件包(public packages)。

Lerna 用户列表: