Lerna简介
- 基于 git + npm 的多package项目管理工具
- 实现原理
- 通过
import-local
优先调用本地lerna命令 - 通过
yargs
生成脚手架,先注册全局属性,再注册命令,最后通过parse
方法解析参数 lerna
注册命令时需要传入builder
和handler
两个方法,builder
用于注册命令专属的options
,handler
用来处理命令的业务逻辑lerna
通过配置npm
本地依赖的方式来进行本地开发,具体写法实在package.json
的依赖中写入file:your-local-module-path
,在lerna publish
时会自动将该路径替换
- 通过
原生脚手架开发痛点分析
- 痛点一:重复操作
- 多Package本地操作
- 多Package依赖安装
- 多Package单元测试
- 多Package代码提交
- 多Package代码发布
- 痛点二:版本一致性
- 发布时版本一致性
- 发布后互相依赖版本升级
package越多,管理复杂度越高
Lerna简介
Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.
Lerner是一个优化基于 git + npm 的多package项目的管理工具
优势
- 大幅度减少重复操作
- 提升操作的标准化
lerna是架构优化的产物,它揭示了一个架构真理:项目复杂度提升以后,就需要对架构进行优化。架构优化的主要目标往往都是以效能为核心。
官网
案例
使用lerna管理的大型项目:
lerna 开发脚手架流程
- 初始化项目
- 初始化npm项目
- 安装lerna
lerna init
初始化项目
- 创建package
lerna create
创建packagelerna add
安装依赖lerna link
链接依赖
- 开发和测试
lerna exec
执行shell脚本lerna run
执行npm命令lerna clean
清空依赖lerna bootstrap
重装依赖
- 发布上线
lerna version
、bump version
lerna changed
查看上版本以来的所有变更lerna diff
查看difflerna publish
项目发布
基于lerna创建项目
bash
# 1. 安装lerna到全局环境
npm i lerna -g
# 2. 安装lerna到开发环境
npm i lerna --save-dev
# 3. 初始化
lerna init
- 添加.gitignore
.gitignore
node_modules
.vscode
.idea
packages/**/node_modules
lerna-debug.log
bash
# 5. 创建package: core
lerna create core
# 在npm账户创建一个可用的组织名称,输入组织名称作为package的前置,避免发布时重名
package name: (core) @blink-cli-dev/core
# 6. 创建package: utils
lerna create utils
# 记得组织名称
package name: (core) @blink-cli-dev/utils
lerna核心操作
lerna add
为所有包安装依赖lerna link
自动为互相引用的包添加软连接lerna exec
执行shell命令,上下文在各个包目录下lerna run
执行各个包的npm命令lerna clean
清空所有的依赖:删除node_moduleslerna bootstrap
重新安装node_modules,建立互相引用的软连接lerna version
更新包版本lerna publish
更新包版本 在推送版本后使用- 可以选择根据git或者package的状态进行发布:
lerna publish from-git
或者lerna publish from-package
,使用from-package
时会将package.json
中的依赖修改为线上依赖 - 当出现
lerna ERR! E402 You must sign up for private packages
错误时,表示发布的包为私有包,应该将包发布为公开的包,在package.json
中配置:json"publishConfig": { "access": "public" },
- 可以选择根据git或者package的状态进行发布: