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 versionlerna 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.logbash
# 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/utilslerna核心操作
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的状态进行发布:
