https://github.com/wscats/lerna-tutorial
💈Some of the lerna tutorial - 《Lerna学习笔记》
https://github.com/wscats/lerna-tutorial
lerna tutorial
Last synced: 2 months ago
JSON representation
💈Some of the lerna tutorial - 《Lerna学习笔记》
- Host: GitHub
- URL: https://github.com/wscats/lerna-tutorial
- Owner: Wscats
- Created: 2022-03-09T05:23:02.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-09T08:47:57.000Z (over 3 years ago)
- Last Synced: 2025-04-14T23:13:40.711Z (2 months ago)
- Topics: lerna, tutorial
- Language: JavaScript
- Homepage:
- Size: 112 KB
- Stars: 43
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Lerna
是一个用来优化托管在 git/npm 上的多 package 代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。
# 基本结构
可以见到项目里面有多个 package.json,这些子项目的 package.json 全部由 lerna.json 管理起来
```js
lerna-project/
|-- packages/
|-- packages-a/
|-- ...
|-- package.json
|-- packages-b/
|-- ...
|-- package.json
|-- ...
|-- lerna.json
|-- package.json
```# 父项目构建
全局安装 lerna 命令
```bash
npm i -g lerna
```将仓库转变为一个 lerna 仓库
```bash
lerna init
```# 子项目构建
增加 2 个 packages
```bash
lerna create @eno/view
lerna create @eno/utils
```# 父项目增加依赖
```bash
npm i chalk
```# 子项目增加依赖
我们可以使用 lerna,分别给相应的 package 增加依赖模块,就不需要手动在子项目里面一个一个的安装
```bash
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 发布 |# 开发
以后别人拿到项目之后,只需要运行以下命令就可以把整个项目的依赖安装好
```bash
# 安装父/根项目依赖
npm i
# 安装子项目依赖
lerna bootstrap
```# pnpm 代替
上面这种方式还能用 pnpm 的方案代替
先在项目根目录建立一个 pnpm 的 workspcae 配置文件 pnpm-workspace.yaml,意味着这是一个 monorepo:
```js
packages:
# 所有在 packages/ 和 components/ 子目录下的 package
- 'packages/**'
- 'components/**'
# 不包括在 test 文件夹下的 package
- '!**/test/**'
```然后直接在根目录 pnpm i 就可以代替原来的 npm i + lerna bootstrap
# 参考文章
- [Monorepo 項目管理方案:lerna + yarn workspace / pnpm](https://icode9.com/content-4-1180398.html)