Monorepo仓库管理策略之 Lerna

这里写目录标题

    • 前言:
    • 一、简介
    • 二、新建项目使用
      • 安装
      • 生成结构
    • 三、复用现有项目
      • 执行命令
      • 查看包
    • 四、配置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.mzph.cn/diannao/44200.shtml

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

相关文章

文心一言的流式接口数据进行处理 增加属性

需求:需要对文心一言的流式接口数据进行处理 增加属性 return ResponseEntity.ok().header("Access-Control-Allow-Origin", "*").contentType(org.springframework.http.MediaType.TEXT_EVENT_STREAM).cacheControl(org.springframework.http…

python调用串口收发数据

1、确认串口信息 2、安装pyserial库 打开终端或命令行,敲入这行命令:pip install pyserial 3、python编程 import serial def main(): #创建串口对象 ser serial.Serial(COM4, 9600, timeout1) if not ser.isOpen(): print("串…

飞睿智能6公里WiFi图传接收模块,低延迟、抗干扰、高速稳定传输数据,无人机、农田远距离WiFi模块

在科技日新月异的今天,无线通信技术正以前所未有的速度发展,不仅改变了我们的生活方式,还为企业带来了前所未有的商业机遇。今天,我要向大家介绍一款飞睿智能的产品——6公里WiFi图传接收模块,它以其高性能、稳定的传输…

【React】基础数据回填--useForm与setFieldsValue详解

相关属性 1.form 2.setFieldsValue 代码 import{Form }from"antd";const Publish =

体积大的快递怎么寄便宜?如何寄件寄包裹更省钱?

大学毕业了,面对即将到来的工作生活,小李不得不把宿舍里的大包小包打包寄回家。可是,当他真正开始打包行李时,才发现这可不是一件简单的事:衣服、被子、书籍、杂物……这些东西加起来体积不小,想要省钱寄快…

基于stm32单片机的智能手环的设计

摘 要 随着科技的飞速发展和人们生活水平的提高,健康与科技日益融合,智能可穿戴设备已成为现代人生活中不可或缺的一部分。智能手环,作为一种便携、实用且功能丰富的可穿戴设备,受到越来越多用户的喜爱。它不仅能够实时监测用户的…

特殊的“user profile service服务登录失”情况

记录一下比较特殊的user profile service服务登录失败情况 公司电脑,某次之后每次来公司电脑开机后就会出现这个情况,后来发现只要是关机后再开机百分百出现,重启就不会,一开始也百度、google了,网上有很多解决方式&am…

DropNotch for Mac v1.0.1 在 Mac 刘海快速使用 AirDrop

应用介绍 DropNotch 是一款专为Mac设计的应用程序,可以将MacBook的凹口区域(刘海)转换为文件放置区。 功能特点 文件共享: 用户可以将文件拖放到MacBook的凹口区域,并通过AirDrop、邮件、消息等方式轻松共享。多显示器支持: 即…

.Net C#执行JavaScript脚本

文章目录 前言一、安装二、执行 JavaScript 脚本三、与脚本交互四、JS 调用 C# 方法五、多线程使用总结 前言 ClearScript 是一个 .NET 平台下的开源库,用于在 C# 和其他 .NET 语言中执行脚本代码。它提供了一种方便和安全的方法来将脚本与应用程序集成,…

PHP酒店宾馆民宿多商户版系统小程序源码

解锁酒店新境界!揭秘多商户版系统的无限可能🏨✨ 🚀 开篇:酒店业的新革命,多商户版系统来袭! 你是否梦想过将你的酒店打造成一个集餐饮、娱乐、购物于一体的综合型休闲空间?现在,这…

【linux】服务器卸载cuda

【linux】服务器卸载cuda 文章目录 【linux】服务器卸载cuda1、查找已安装的 CUDA 包:2、卸载 CUDA:3、删除残留文件4、更新系统的包索引:5、检查是否卸载干净: 1、查找已安装的 CUDA 包: dpkg -l | grep cuda2、卸载…

【JavaScript】深入理解Promise:从基础概念到进阶用法、手写promise

🔥 个人主页:空白诗 文章目录 一、引言二、Promise概述1. Promise的定义2. Promise的用途3. Promise的三种状态4. Promise的构造函数和基础结构5. Promise的优点6. Promise的实例方法7. Promise的静态方法 三、Promise的基本用法1. 创建一个Promise2. th…

The First项目报告:引领L2解决方案新纪元的模块化协议AltLayer

在区块链演进中,可扩展性与定制化成为开发者核心诉求。ZK Rollups与Optimistic Rollups虽显著提升以太坊等区块链性能,却面临访问性、定制难、中心化风险及流动性分散等挑战。AltLayer以Rollups-as-a-Service创新模式,赋予开发者直接管理roll…

【漏洞复现】飞企互联-FE企业运营管理平台——uploadAttachmentServlet——文件上传

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

在误装Windows server2019 后如何利用Windows.old恢复?

🏆本文收录于《CSDN问答解惑》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

开源数字人项目Hallo

硬件条件: gpu最低12G 软件: cuda需支持 Python选择3.10吧,我的版本3.11 源码: GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…

阅读笔记——《Fuzz4All: Universal Fuzzing with Large Language Models》

【参考文献】Xia C S, Paltenghi M, Le Tian J, et al. Fuzz4all: Universal fuzzing with large language models[C]//Proceedings of the IEEE/ACM 46th International Conference on Software Engineering. 2024: 1-13.【注】本文仅为作者个人学习笔记,如有冒犯&…

科研绘图系列:python语言实验线图(line Chart)

介绍 两组数据在不同时间点的差异检验结果线图 导入包 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from scipy import stats输入数据 ctr = [2, 2, 3, 3, 4, 5, 5, 6, 4, 8, 6, 6, 9, 11, 12, 12, 15, 16, 20, 25, 27] drug = [2, 3, …

python开发prometheus exporter--用于hadoop-yarn监控

首先写python的exporter需要知道Prometheus提供4种类型Metrics 分别是:Counter, Gauge, Summary和Histogram * Counter可以增长,并且在程序重启的时候会被重设为0,常被用于任务个数,总处理时间,错误个数等只增不减的指…

如何录制屏幕视频?4款软件,轻松录屏

在数字化飞速发展的时代,如何录制屏幕视频已经成为我们工作、学习和娱乐中不可省略的一个重要问题。无论是制作教学教程还是录制游戏视频等,屏幕视频录制都为我们提供了极大的便利。今天,就让我们一起探索如何录制屏幕视频的精彩方式&#xf…