是一个用来优化托管在 git/npm 上的多 package 代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。
可以见到项目里面有多个 package.json,这些子项目的 package.json 全部由 lerna.json 管理起来
lerna-project/
|-- packages/
|-- packages-a/
|-- ...
|-- package.json
|-- packages-b/
|-- ...
|-- package.json
|-- ...
|-- lerna.json
|-- package.json
全局安装 lerna 命令
npm i -g lerna
将仓库转变为一个 lerna 仓库
lerna init
增加 2 个 packages
lerna create @eno/view
lerna create @eno/utils
npm i chalk
我们可以使用 lerna,分别给相应的 package 增加依赖模块,就不需要手动在子项目里面一个一个的安装
lerna add chalk
以前我们在根目录下 npm i 完之后,只会安装好依赖生成 node_modules 在根目录,有了 lerna 之后可以配合子项目的 package.json 统一管理子项目下的所有依赖 node_modules 的安装和删除
以前需要删除一个个子项目的依赖,现在只需要 lerna clean 一个命令即可
命令 | 描述 |
---|---|
lerna | bootstrap 安装依赖 |
lerna | clean 删除各个包下的 node_modules |
lerna | init 创建新的 lerna 库 |
lerna | list 显示 package 列表 |
lerna | changed 显示自上次 relase tag 以来有修改的包, 选项通 list |
lerna | diff 显示自上次 relase tag 以来有修改的包的差异, 执行 git diff |
lerna | exec 在每个包目录下执行任意命令 |
lerna | run 执行每个包 package.json 中的脚本命令 |
lerna | add 添加一个包的版本为各个包的依赖 |
lerna | import 引入 package |
lerna | link 链接互相引用的库 |
lerna | create 新建 package |
lerna | publish 发布 |
以后别人拿到项目之后,只需要运行以下命令就可以把整个项目的依赖安装好
# 安装父/根项目依赖
npm i
# 安装子项目依赖
lerna bootstrap
上面这种方式还能用 pnpm 的方案代替
先在项目根目录建立一个 pnpm 的 workspcae 配置文件 pnpm-workspace.yaml,意味着这是一个 monorepo:
packages:
# 所有在 packages/ 和 components/ 子目录下的 package
- 'packages/**'
- 'components/**'
# 不包括在 test 文件夹下的 package
- '!**/test/**'
然后直接在根目录 pnpm i 就可以代替原来的 npm i + lerna bootstrap