Skip to content

Lerna简介

  • 基于 git + npm 的多package项目管理工具
  • 实现原理
    • 通过import-local优先调用本地lerna命令
    • 通过yargs生成脚手架,先注册全局属性,再注册命令,最后通过parse方法解析参数
    • lerna注册命令时需要传入builderhandler两个方法,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管理的大型项目:

lerna 开发脚手架流程

  1. 初始化项目
    1. 初始化npm项目
    2. 安装lerna
    3. lerna init 初始化项目
  2. 创建package
    1. lerna create 创建package
    2. lerna add 安装依赖
    3. lerna link 链接依赖
  3. 开发和测试
    1. lerna exec 执行shell脚本
    2. lerna run 执行npm命令
    3. lerna clean 清空依赖
    4. lerna bootstrap 重装依赖
  4. 发布上线
    1. lerna versionbump version
    2. lerna changed 查看上版本以来的所有变更
    3. lerna diff 查看diff
    4. lerna publish 项目发布

基于lerna创建项目

bash
# 1. 安装lerna到全局环境
npm i lerna -g

# 2. 安装lerna到开发环境
npm i lerna --save-dev

# 3. 初始化
lerna init
  1. 添加.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核心操作

  1. lerna add 为所有包安装依赖

  2. lerna link 自动为互相引用的包添加软连接

  3. lerna exec 执行shell命令,上下文在各个包目录下

  4. lerna run 执行各个包的npm命令

  5. lerna clean 清空所有的依赖:删除node_modules

  6. lerna bootstrap 重新安装node_modules,建立互相引用的软连接

  7. lerna version 更新包版本

  8. 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"
          },