nicenote/docs/fea/tools/lerna.md
2021-10-20 12:01:04 +08:00

125 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
nav:
title: 前端
path: /fea
group:
title: 💊 工具
order: 9
path: /tools
---
# lerna
## 介绍
lerna 是一个包管理工具,方便在大型开源项目中不需要手动开启多个仓库
## 使用方法
### 安装
> npm i lerna -g
### 创建子项目
> lerna create {packageName}
### 添加依赖
```javascript
// 此处用eslint作为案例
// 所有 package 都装
lerna add eslint
// 只有 package1 安装
lerna add eslint --scope=package1
// 符合 prefix 的包都会安装
lerna add esint packages/prefix-*
```
> -dev添加到 devDependencies
> --exact只安装特定版本
### 执行 npm script 命令
```javascript
// 执行所有子项中的 test
lerna run test
// 执行 package1 中的 test
lerna run --scope package1 test
// 只执行除了匹配package-*外项目中的 test
lerna run --ignore package-* test
```
### 查看哪些包需要发布
```javascript
lerna updated
```
> - 决定哪一个包需要被publish
### 发布依赖包
```javascript
learna publish
```
> 建议使用 independent 模式,独立对每个依赖包做管理
> `--npm-client=cnpm 指定源`
## 常见命令
| 命令 | 说明 |
| :---: | :---: |
| 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 <commond> | 执行每个包package.json中的脚本命令 |
| lerna add | 添加一个包的版本为各个包的依赖 |
| lerna import | 引入package |
| lerna link | 链接互相引用的库 |
| lerna create | 新建package |
| lerna publish | 发布 |
## 官方文档
[http://www.febeacon.com/lerna-docs-zh-cn/](http://www.febeacon.com/lerna-docs-zh-cn/)
### Q&A
#### 1. 发布包提示lerna ERR! ENOREMOTEBRANCH Branch 'master' doesn't exist in remote 'origin'.
> git remote -v 查看是否是 origin 指向的分支,推送最新分支
> lerna publish
#### 2. lerna ERR! E402 You must sign up for private packages
在相应包的 package.json 添加
```js
{
...
"publishConfig": {
"access": "public"
}
}
```
#### 使用father打包报错
如果是使用的 **yarn** 安装的包,改成 **cnpm** 安装,再试一次