lerna

2019-10-24  本文已影响0人  黑曼巴yk

前言

Lerna是一个管理多个Node模块的工具,已经被很多著名模块使用:Babel,React,Jest等

Monorepo vs Multirepo

Monorepo的全称是monolithic repository,即为单体式仓库,与之对应的是Multirepo(multiple repository)。这里是指每个仓库中所管理的模块数量

Multirepo是比较传统的做法,即每一个模块都单独用一个仓库来进行管理,典型是webpack,优缺点总结如下

优点:

Monorep 是把所有相关的 module 都放在一个仓库里进行管理,每个 module 独立发布,典型案例有 babel,优缺点总结如下:

优点:

Lern可以帮我们做什么

lerna可以通过git和npm 来帮助我们优化管理Monorepo工作流,同时也可以减少开发和构建环境中对大量依赖包复制的时间和空间需求
一个基本的Lerna仓库结构如下:

lerna-demo
    ┣━ packages/
    ┃     ┣━ package-1/
    ┃     ┃      ┣━ ...
    ┃     ┃      ┗━ package.json
    ┃     ┗━ package-2/
    ┃            ┣━ ...
    ┃            ┗━ package.json
    ┣━ ...
    ┣━ lerna.json
    ┗━ package.json

lerna采用两种不同方式来管理项目:Fixed(默认)或者Independent

Fixed模式

固定模式下 Lerna 项目在单一版本线上运行。版本号保存在项目根目录下 lerna.json 文件中的 version 下。当你运行 lerna publish 时,如果一个模块自上次发布版本以后有更新,则它将更新到你将要发布的新版本。这意味着你在需要发布新版本时只需发布一个统一的版本即可。

Independent 模式(--independent)

独立模式下 Lerna 允许维护人员独立地的迭代各个包版本。每次发布时,你都会收到每个发生更改的包的提示,同时来指定它是 patch,minor,major 还是自定义类型的迭代。

创建模块

create
lerna create module-a

创建完之后可以看到目录结构

lerna-demo/
    ┣━ packages/
    ┃     ┗━ module-a/
    ┃            ┣━ ...
    ┃            ┗━ package.json
    ┣━ lerna.json
    ┗━ package.json
查看模块列表

创建完毕之后,我们可以通过 list 命令来查看和确认现在管理的包是否符合我们的预期,执行如下命令:

lerna list
添加依赖包

在lerna项目中,可以分别给每个模块单独添加依赖包,也可以同时给部分或全部模块添加依赖包,还可以把管理的某些模块作为依赖添加给其他模块。

// 给module-a模块添加 lodash依赖
lerna add lodash --scope module-a

// 给module-b模块添加 lodash依赖,并作为 devDependencies
lerna add lodash --scope module-b --dev

// 在所有模块里安装 word-wrap 依赖
lerna add moment
安装依赖包

lerna 通过 bootstrap 命令来快速安装所有模块所需的依赖包。基本命令如下:

lerna bootstrap

refer

http://www.uedlinker.com/2018/08/17/lerna-trainning/#%E4%BB%80%E4%B9%88%E6%98%AF-lerna

上一篇 下一篇

猜你喜欢

热点阅读