Lerna包管理

2024-03-12 02:59
文章标签 管理 lerna

本文主要是介绍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         // 提升到根目录

 

这篇关于Lerna包管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/799934

相关文章

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M