Lerna包管理

认识lerna

导读: 本章节主要讲解Lerna是什么,Lerna有什么用,如何使用Lerna进行npm包管理,大厂的Lerna版本管理策略是怎么做的,Lerna是如何实现本地包依赖管理以及底层原理是什么? 读者可以带着这些问题去阅读,使学习事半功倍。

一句话理解lerna(面试专用)

A tool for managing JavaScript projects with multiple packages. Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

翻译: Lerna 是一个用来优化托管在git\npm上的多package代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。

 

关键字:多仓库管理,多包管理,自动管理包依赖,monoRepos

lerna管理开发者最关心的几个问题

  1. lerna采用的是monorepo模式,它和multrepo有什么区别?
  2. lerna是如何实现内部文件软链的?是npm link么?
  3. lerna在哪些场景下使用会比较优势?
  4. lerna如何安装依赖,如何更新,如何发布?
  5. lerna如何提升安装性能?
  6. lerna如何指定发布版本,如何指定发布子目录?

一张图讲解大厂lerna的使用策略

导读: 我们一般会把一个大型项目才分两大部分:业务模块 + 通用模块。 由于通用模块会被多个业务模块使用,往往是通过NPM包提供服务。lerna很好的管理多个包以及他们的依赖关系。

 

image.png

 

 

Lerna核心原理

monorepo 和 multrepo 区别

monorepo: 是将所有的模块统一的放在一个主干分支之中管理。

multrepo: 将项目分化成为多个模块,并针对每一个模块单独的开辟一个reporsitory来进行管理。

image.png

 

 

lerna是如何运作的

导读: lerna是如何做到内部模块的软链和管理,对于作者来说是一个很大的困惑?在npm下,npm link可以在系统目录下建立包软链。软链可以不需要发布,就可以使用本地包,很好的提高开发效率。

阅读源码发现lerna实现软链使用了symlink-dependencies包。最终使用fs.symlink函数实现了文件软链。createSymbolicLink源码地址

image.png

 

 

Lerna配置

lerna 环境搭建

npm i lerna -g 				// 全局安装lerna
lerna init 					// 初始化lerna目录

lerna.json基础配置

{
"version": '0.0.1',
"npmClient": 'cnpm',                        // yarn, npm
"packages": ['packages/*', 'xx/*'],         // 管理多个目录
"command": {
    "publish": {                            // lerna publish配置,忽略*.md文件,
        "ignoreChanges": ["*.md"],
        "message": "chore(release): publish"
    },
    "bootstrap": {                          // lerna bootstrap配置,忽略component-*包
      "ignore": "component-*",
      "npmClientArgs": ["--no-package-lock"]
    }
}

lerna项目目录结构实例

 

image.png

 

 

Lerna基本操作

本小节会介绍lerna基本操作命令,如何创建一次lerna的工作流。lerna的常用命令:list, bootstrap, clean, changed, publish。

如何安装依赖

lerna bootstrap

如何查看本地包列表

lerna list

如何删除安装依赖

lerna clean

如何建立软链

lerna link

如何发布安装包

lerna publish

如何创建一次lerna工作流

导读: 从lerna boostrap(依赖包安装) --> 开发模块 --> git commit --> lerna changed(查看包变化) --> lerna publish。

lerna bootstrap     // 安装依赖包
lerna list          // 本地依赖包
lerna changed       // 待发布包列表
lerna publish       // 发布

Lerna高阶操作(黑科技)

publish 高级应用

导读: 某些发布的情况,开发者需要指定安装包版本,或者指定子目录发布。

lerna publish --dist-tag next   // 指定当前版本号
lerna publish --contents dist   // 指定dist目录为发布目录

bootstrap 性能提升

导读: 如果安装包里面有多个基础依赖包,可以使用 --hoist 把NPM包安装到根目录,提升性能。

lerna bootstrap --hoist         // 提升到根目录

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值