lerna是一个package管理工具, 用于管理包含多个package的javascript项目.
本文通过demo讲解lerna如何管理多个package, 最终把这几个package推送到npm仓库.
实现通过npm全局安装后, 可以在命令行使用自定义命令的功能.
一、安装
可以把使用 npm install -g lerna
把lerna全局安装到本地, 也可以使用 npx lerna
命令, 直接使用lerna
二、初始化lerna项目
使用 lerna init
命令初始化一个项目
如上图所示, lerna 默认会使用 npm workspaces 特性来管理 package. 我们可以在 packages 目录下创建子项目. 我们将会创建 a
b
cli
三个子项目, 项目之间存在引用关系, 我们一起看看用lerna如何对这三个项目进行管理吧.
三、开发各个package
- 使用
lerna create
命令创建a
项目
- 我们修改项目
a
的name, 加上我们申请的 npm organization (organization大家可以在自己的npm下自行申请). 加organization前缀是为了把我们的子项目推送到这个组织下. 如下图, 我的 organization 是 lerna-basic-usage.
- 我们使用es module风格来书写js代码, 所以我们把 a.js 改成 a.mjs. 同时, 要同步修改 package.json 的 main
- 在 lib/a.mjs 书写我们的业务代码. 这里我们导出一个函数, 这个函数将会被其他项目使用.
- 参考步骤1, 创
b
项目
- 创建
cli
项目
cli
项目将导入 a
b
项目, 调用其中方法.
cli
应具备全局安装后, 可以在命令行工具使用 my-demo-cli
命令的功能.
- 使用
lerna create cli
命令初始化项目, 在 package.json 添加 bin 字段, 我们可以在 bin 字段注册自定义命令. 这里我们注册的自定义命令是my-demo-cli
, my-demo-cli 指向的是 bin/cli.mjs
- 在
cli
项目中引用a
b
项目
lerna add @lerna-basic-usage/a ./packages/cli
lerna add @lerna-basic-usage/b ./packages/cli
- cd到package/cli, 使用
npm link
命令, 创建my-demo-cli
软链接
四、发布
使用 lerna publish
命令把各个项目推送到npm仓库
五、全局安装
npm i -g @lerna-basic-usage/cli