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 add
或npm 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