Monorepo仓库管理策略之 Lerna

news2024/11/15 10:53:35

这里写目录标题

    • 前言:
    • 一、简介
    • 二、新建项目使用
      • 安装
      • 生成结构
    • 三、复用现有项目
      • 执行命令
      • 查看包
    • 四、配置package相互引用
      • 导入现有的包
    • 五、发布包
      • 确定项目版本
      • 发布项目
      • 添加项目到到git
      • 发布包到NPM包
      • 发布出错解决方案
    • 五、实例代码

前言:

将大型代码仓库分割成多个独立版本化的 软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且, 跨越多个代码仓库的测试将迅速变得非常复杂。

一、简介

Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化

特点:

  • Lerna 对任意数量的项目运行命令,它以最有效的方式、以正确的顺序执行
  • Lerna 管理你的发布流程,从版本管理到发布到 NPM
  • Lerna 速度很快,甚至比大多数同类解决方案还要快

二、新建项目使用

安装

注意: addbootstrap link 三个命令在v7后都不在维护

mkdir lerna-demo && cd lerna-demo
npm i lerna -g  // 目前是 8.1.6
lerna -h

在这里插入图片描述

生成结构

你将启动并运行一个工作 git 存储库,包括 npm 工作区,并且 lerna 可用于创建、版本控制和发布你想要开发的任何包

lerna init
# --independent/-i – 使用独立的 版本控制模式。
# or
npx lerna init --packages="packages/*" #手动指定一组要匹配的模式

目录结构

lerna-demo 
	├── lerna.json
	├── node_modules
	├── package-lock.json
	└── package.json

三、复用现有项目

我们已可以使用现有的项目来,来用 lerna init ,现有项目入口,接下来的项目讲解将会使用这个现有项目

执行 init

lerna init

执行命令

执行每个包中的命令

# 运行每个项目中的dev
lerna run dev  
# 同时运行多个命令
lerna run dev,build

执行单个包命令

lerna run dev --scope=v-cart  

--scope: v-cart 包名称

在这里插入图片描述

查看包

lerna ls
在这里插入图片描述

四、配置package相互引用

v-user 添加 index.js

const baseInfo = {
    addr: "成都市",
    age: 20,
    name: "张三",
  };
 
  module.exports = {baseInfo}

v-cart
package.json

{
  "scripts": {
+    "build": "echo build v-cart",
  },
  "dependencies": {
+    "v-user":"1.0.0"
  }
}

添加 index.js

// import {baseInfo} from 'v-user'
let {baseInfo} = require('v-user')

console.log(JSON.stringify(baseInfo));

运行命令:

yarn # 安装所有包

lerna run test --scope=v-cart

在这里插入图片描述

导入现有的包

lerna import
在这里插入图片描述

五、发布包

先将本地代码跟 git 仓库进行链接,如果是新分支,需要将分支先推送上去,我这以创建新的分支lerna 为例

在这里插入图片描述

在这里插入图片描述

确定项目版本

lerna version --no-private 
#--no-private  过滤掉private 项目

在这里插入图片描述
在这里插入图片描述

发布项目

lerna publish from-package
#--no-private  过滤掉private 项目

1 . 确保 镜像源是 npm

npm config get registry 
// https://registry.npmjs.org/

2. 查看是否登录 npm, 没有就请 npm login 进行登录

npm whoami

在这里插入图片描述

添加项目到到git

在这里插入图片描述

发布包到NPM包

v-cart 项目已经被占用,所有我们将项目整体换个名字 ziyu-xxx 开头

在这里插入图片描述

发布出错解决方案

如果某些包已成功发布而其他包未成功发布,则lerna publish可能使存储库处于与某些更改的文件不一致的状态。那么你可以运行 lerna publish from-git 来重试发布相同的已标记版本,而不必在重试时再次更改版本。

五、实例代码

github 实例代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1915272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国光储充一体化行业:有望成为全球能源转型的重要驱动力

光储充一体化系统,又称微电网解决方案,系一种整合分布式光伏能源、用电负载管理、配电设施以及监控与保护设备的自给型能源供应体系。该系统核心组件包括光伏发电系统、储能装置及充电站,其工作原理为:光伏发电系统捕获太阳能并转…

Floyd判圈算法——寻找重复数(C++)

287. 寻找重复数 - 力扣(LeetCode) 题目描述 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返…

系统分析师-基础知识

基础知识 一、计算机组成与结构1、计算机系统基础知识1.1 计算机硬件组成1.2 中央处理单元(CPU)1.3 数据表示1.3.1 R进制转十进制:1.3.2 十进制转R进制: 1.4 校验码(3种校验码)1.4.1 基本知识1.4.2 奇偶校验…

Security认证要点速记

登录校验流程 springSecurity已经为我们默认实现了一个用不着的登录功能,我们需要自己实现个符合我们需求的登录功能,所以我们需要去了解默认登录功能的流程,对其中的部分进行替换 SpringSecurity底层就是过滤器链,包含实现了各种…

滑动变阻器在实际应用中需要注意哪些安全事项?

滑动变阻器在实际应用中,为了确保其正常运作及保护电路安全,需要注意以下安全事项: 一、了解并遵守规格参数 最大电阻值和允许通过的最大电流值:使用前,必须清楚滑动变阻器的最大电阻值和允许通过的最大电流值&#x…

RISC-V异常处理流程概述(2):异常处理机制

RISC-V异常处理流程概述(2):异常处理机制 一、异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册一、异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先需要执…

软件工程(下)

目录 需求工程 概述 需求获取 分层 获取方法 项目管理维度 需求开发---需求分析 UML(统一建模语言):平台无关、语言无关 UML 41视图 需求的定义、验证、跟踪、变更 需求定义 需求验证 需求跟踪 需求变更管理 软件系统建模 软件…

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架,用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用,并与ASP.NET Core生态系统完美…

深入了解java锁升级可以应对各种疑难问题

对于java锁升级,很多人都停留在比较浅层的表面理解,一定程度下也许够用,但如果学习其中的细节,我们更好地理解多线程并发时各种疑难问题的应对方式! 因此我将锁升级过程中可能涉及的大部分细节或者疑问都整合成了一篇…

01MFC建立单个文件类型——画线

文章目录 选择模式初始化文件作用解析各初始化文件解析类导向创建鼠标按键按下抬起操作函数添加一个变量记录起始位置注意事项代码实现效果图虚实/颜色线选择模式 初始化文件作用解析 运行: 各初始化文件解析 MFC(Microsoft Foundation Classes)是一个C++类库,用于在Win…

fm足球经理Football Manager 2022 for mac 下载安装包

《Football Manager 2022》(足球经理2022)是一款由Sports Interactive开发并由SEGA发行的足球管理模拟游戏。这款游戏让玩家扮演足球俱乐部的 manager(经理),负责球队的所有管理工作,包括战术制定、球员转会…

美业收银系统怎么选?哪些功能实用?美业门店管理系统|拓客系统

选择美业会员系统时,你可以考虑以下几个方面的功能来确定哪些对你最实用: 1.会员管理: 系统应该能够轻松管理会员资料、积分、消费记录等信息,以便更好地了解客户需求并提供个性化服务。 2.促销与营销工具: 包括发…

RS NGP804 直流电源

直流电源 R&S NGP804 -借助四核功率提升效率- R&SNGP800 直流电源系列共有五种不同型号,功率为 400 W 或 800 W,可在多种操作条件下提供最大功率。该电源系列具有两个或四个 200 W 输出通道,每通道的输出电压和电流可达 64 V 及 …

C++入门基础篇(下)

目录 6.引用 6.1 引用的特性 6.2 const引用 7.指针和引用的关系 8.内联函数 9.nullptr 6.引用 引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。比如&a…

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序

Java毕业设计 基于SSM vue图书管理系统小程序 微信小程序 SSM 图书管理系统小程序 功能介绍 用户 登录 注册 首页 图片轮播 图书信息推荐 图书详情 赞 踩 评论 收藏 系统公告 公告详情 用户信息修改 我的待还 图书归还 催还提醒 我的收藏管理 意见反馈 管理员 登录 个人中心…

JAVA--SpringCloud

SpringCloud基础 为什么需要spring cloud 单体结构--Monolith 首先请回想一下我们所开发的服务是什么样子的。通常情况下,这个服务所对应的代码由多个项目(模块)所组成,各个项目会根据自身所提供功能的不同具有一个明确的边界。…

Mosh|初学者SQL教程第二弹

using子句(如果匹配的两个字段在两个表中的名字相同可以使用) 多条件使用using 自然连接( NATURAL JOIN),它意味着让搜索引擎基于共同列自行去尝试join,可能会出现意想不到的结果,不要轻易尝试 交叉连接&am…

DNS 杂谈

一、定义 DNS(Domain Name System),域名系统,该系统记录域名和Ip地址的相互映射关系。用户访问互联网时,通过域名地址得到对应的IP地址,这个过程称为域名解析。DNS运行于UDP协议之上,使用的端口…

HomeAssistant HAOS安装HACS集成

1. HAOS安装HACS集成 1.1 手动安装HACS 下载HACS压缩包 加载项安装samba,可能需要特殊网络环境不然非常慢 配置->加载项->加载项商店-> 搜索samba,并安装,配置用户名密码 Samba配置完成之后,如果启动不起来就需要重启HomeAssis…

图文讲解IDEA如何导入JDBC驱动包

前言 学习JDBC编程,势必要学会如何导入驱动包,这里笔者用图文的方式来介绍 视频版本在这里 50秒教你怎么导入驱动包然后进行JDBC编程的学习_哔哩哔哩_bilibili 忘记录音频了,大伙凑合着看 下载驱动包 https://mvnrepository.com/artifact/mysql/mysql-connector-java 去中…