Skip to content

lerna使用

pengzhanbo

739字约2分钟

development

2021-11-26

lerna

概述

lerna 是一个多包管理工具,针对使用 git 和 npm/yarn 等管理多软件包的代码仓库的工作流程进行优化。

在开发一个大型项目时,往往会将整个项目拆分为多个代码仓库,进行独立版本化的软件包管理,这对于代码共享非常有用。

比如开源项目 babel,整个项目被拆分为了@babel/core, @babel/parser, @babel/traverse等多个软件包。

但是这也会导致如果某些更改跨越了多个代码仓库的话,会变得麻烦且难以跟踪。 lerna可以帮助优化对多个代码仓库的依赖、版本管理、工作流等。

安装

lerna 可以全局安装,也可以在项目中安装(以下内容使用项目中安装的方式)

# npm
npm install lerna
# yarn
yarn add lerna

简单入门

创建一个项目,并使用lerna进行项目环境初始化

mkdir lerna-demo && cd $_
yarn init -y
yarn add lerna
npx lerna init

你将会得到一个包含以下内容的项目文件夹:

lerna-demo
  packages/
  lerna.json
  package.json

其中,packages/ 目录用于存放所有的软件包。lerna.json是lerna的配置文件。

配置说明

// lerna.json
{
  "useWorkspaces": true,
  "npmClient": "npm", // npm | yarn
  "packages": ["packages/*"],
  "version": "0.0.0",
  "command": {
    "bootstrap": {
      // more...
    }
    // more
  }
}
  • npmClient:设置当前使用的包管理器, 默认是npm, 可以设置为yarn;
  • version:软件包版本号,根据 semver版本号规范命名;
  • packages:软件包所在的目录,可以使用golb做模式匹配;
  • useWorkspaces:使用工作空间,这个选项可以更好的跟yarn配合使用;
  • command:对lerna的各个command进行配置。

命令行说明

lerna init

初始化一个lerna项目,默认将会在目录中新建 packages/ 和 lerna.json。

--independent: 使用分包独立版本管理模式,各个软件包使用独立的版本号。

lerna create pkgName [location]

在项目中新建一个子包, pkgName设置包名。 location制定包所在目录,默认是 packages配置的第一个元素。

lerna add <package>[@version] [--dev] [--exact] [--peer]

类似于 yarn addnpm install,在一个lerna repo中往dependency中添加依赖包。

  • --dev: 表示将包添加到 devDependencies
  • --exact: 添加一个确定版本的包(如1.0.1),而不是一个版本范围的包如(^1.0.1)
  • --peer: 添加一个前置依赖包。

lerna bootstrap

为当前 lerna repo 中的所有包安装 依赖库,并 link所有 同域依赖。

lerna run <script>

在当前 lerna repo 中的所有包中执行 script 命令。

packages/
  package1/
  package2/
lerna run build # 相当于在 package1、package2 中执行 npm run build
  • --scope 过滤符合条件的包

    lerna run build --scope test component
  • --stream 使用报名作为前缀,交叉输出所有包的控制台信息流。

    lerna run build --stream
  • --parallel 类似于 stream。

    lerna run build --parallel

lerna clean

删除所有包的node_modules