第一步

 创建js文件 文件名为downloadNpmPackage.js

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";const fs = require("fs");
const path = require("path");
const request = require("request");// 设置依赖目录
const downUrl = "./npm-dependencies-tgz";
if (!fs.existsSync(downUrl)) {fs.mkdirSync(downUrl);
}// 读取 yarn.lock 文件内容
const yarnLockPath = "./yarn.lock";
if (!fs.existsSync(yarnLockPath)) {console.error("未找到 yarn.lock 文件,请确保在项目根目录。");process.exit(1);
}
const yarnLockContent = fs.readFileSync(yarnLockPath, "utf8");// 正则匹配所有 resolved URL
const resolvedPattern = /resolved\s+"([^"]+)"/g;
let match;
const tgz = [];// 从 yarn.lock 提取所有下载地址
while ((match = resolvedPattern.exec(yarnLockContent)) !== null) {const url = match[1];// 过滤出 tarball 链接(一般 ending with .tgz 或 npm registry 的地址)if (url.endsWith(".tgz") || url.includes("registry.npmjs.org")) {tgz.push(url);}
}if (tgz.length === 0) {console.log("未在 yarn.lock 中找到任何可下载的依赖链接。");process.exit(0);
}console.log(`共解析到 ${tgz.length} 个依赖包,将开始下载。`);// 重试次数和状态变量
const retryTimes = 3;
let currentTryTime = 0;
let currentDownIndex = 0;
const downloadFailTgz = [];// 下载进度显示
function showProgress(received, total, filePath) {const percentage = ((received * 100) / total).toFixed(2);process.stdout.write(`\r${filePath} 下载进度:${percentage}% (${received}/${total} 字节)`);if (received >= total) {console.log(`\n${filePath} 下载完成!`);}
}// 依赖下载函数
function doDownload(url) {const filename = path.basename(url.split("?")[0]);const outputDir = path.join(downUrl, filename);const req = request({method: "GET",uri: url,timeout: 60000});// 获取内容长度req.on("response", (data) => {const totalBytes = parseInt(data.headers["content-length"]);let receivedBytes = 0;// 监听下载过程data.on("data", (chunk) => {receivedBytes += chunk.length;showProgress(receivedBytes, totalBytes, filename);});});// 管道写入文件const writeStream = fs.createWriteStream(outputDir);req.pipe(writeStream);req.on("error", (err) => {console.error(`\n${filename} 下载失败:`, err);handleRetryOrFail();});writeStream.on("finish", () => {// 当前文件下载成功,继续下一个currentDownIndex++;currentTryTime = 0;startNextDownload();});writeStream.on("error", (err) => {console.error(`\n${filename} 写入错误:`, err);handleRetryOrFail();});function handleRetryOrFail() {if (currentTryTime < retryTimes) {currentTryTime++;console.log(`\n${filename} 重试第 ${currentTryTime} 次...`);doDownload(url);} else {console.warn(`\n${filename} 下载失败,已重试 ${retryTimes} 次`);downloadFailTgz.push(url);currentDownIndex++;currentTryTime = 0;startNextDownload();}}
}// 开始下一次下载
function startNextDownload() {if (currentDownIndex < tgz.length) {console.log(`开始下载第 ${currentDownIndex + 1}/${tgz.length} 个依赖`);doDownload(tgz[currentDownIndex]);} else {// 全部下载完成if (downloadFailTgz.length === 0) {console.log("【完成】所有依赖均下载成功!");} else {console.warn("【完成】部分依赖下载失败,请手动下载:");downloadFailTgz.forEach((url) => console.log(url));}}
}// 启动第一个下载
startNextDownload();

放置在与yarn.lock同级目录下 然后再这个目录下打开终端执行 node downloadNpmPackage.js
等待即可

第二步

准备一份名为UploadnpmPackage.sh得文件将以下内容复制进去

#!/bin/bash# 解析参数
while getopts ":r:u:p:" opt; docase $opt inr) REPO_REGISTRY="$OPTARG" ;; # 例如:http://xxx/xxx/xxx/u) USERNAME="$OPTARG" ;;       # npm账号(可选,若需要登录)p) PASSWORD="$OPTARG" ;;       # npm密码*) echo "用法: $0 -r <registry_url> [-u <用户名>] [-p <密码>]"; exit 1 ;;esac
done# 检查必填参数
if [[ -z "$REPO_REGISTRY" ]]; thenecho "请提供仓库地址参数 -r"exit 1
fi# 若提供了用户名密码,提前登录(可选)
if [[ -n "$USERNAME" && -n "$PASSWORD" ]]; thennpm set //$(echo "$REPO_REGISTRY" | sed 's|^https*://||')/:_authToken "$PASSWORD"# 或者登录# npm login --registry=$REPO_REGISTRY
fi# 查找所有 .tgz 文件
find . -type f -name '*.tgz' | while read -r file; doecho "开始上传:$file"# 进入包所在目录,执行 npm publish# 如果包路径不同,可以考虑进去目录再执行# 这里假设包就是当前目录或子目录npm publish "$file" --registry="$REPO_REGISTRY"if [[ $? -eq 0 ]]; thenecho "成功上传:$file"elseecho "上传失败:$file"fiecho ""
done

将这个文件放在刚才打出来的那个包里与其他tag包再同一个目录下
然后再npm-dependencies-tgz 这个目录上右键走git bash 
执行以下命令   红色部分替换为你自己得

sh UploadnpmPackage.sh -u admin -p nexusAdmin2023 -r

http://172.24.105.249:8089/service/rest/v1/components?repository=npm-local

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

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

相关文章

Unity VS Unreal Engine ,“电影像游戏的时代” 新手如何抉择引擎?(结)

Unity VS Unreal Engine &#xff0c;“电影像游戏的时代” 新手如何抉择引擎&#xff1f;(1)-CSDN博客 这是我的上一篇文章&#xff0c;如果你仍然困惑选择引擎的事情&#xff0c;我们不妨从别的方面看看 注意&#xff1a;我们可能使用"UE5"来表示Unreal Engine系…

EVAL长度限制突破方法

EVAL长度限制突破方法 <?php $param $_REQUEST[param]; If (strlen($param) < 17 && stripos($param, eval) false && stripos($param, assert) false) //长度小于17&#xff0c;没有eval和assert关键字 {eval($param); } //stripos — 查找字符串…

Linux部署.net Core 环境

我的环境 直接下载安装就可以了 wget https://builds.dotnet.microsoft.com/dotnet/Sdk/8.0.315/dotnet-sdk-8.0.315-linux-x64.tar.gzmkdir -p $HOME/dotnet && tar zxf dotnet-sdk-8.0.315-linux-x64.tar.gz -C $HOME/dotnet export DOTNET_ROOT$HOME/dotnet expor…

ARM-定时器-PWM通道输出

学习内容需求点亮4个灯&#xff0c;采用pwm的方式。定时器通道引脚AFLED序号T3CH0PD12AF2LED5CH1PD13AF2LED6CH2PD14AF2LED7CH3PD15AF2LED8实现LED5, LED6, LED7, LED8呼吸灯效果通用定时器多通道点亮T3定时器下的多个通道的灯。开发流程添加Timer依赖初始化PWM相关GPIO初始化P…

javaSE(List集合ArrayList实现类与LinkedList实现类)day15

目录 List集合&#xff1a; 1、ArrayList类&#xff1a; &#xff08;1&#xff09;数据结构&#xff1a; &#xff08;2&#xff09;扩容机制 &#xff08;3&#xff09;ArrayList的初始化&#xff1a; &#xff08;4&#xff09;ArrayList的添加元素方法 &#xff08;5…

解决 WSL 中无法访问 registry-1.docker.io/v2/,无法用 docker 拉取 image

文章目录无法拉取docker镜像补充迁移 WSL 位置Install Docker无法拉取docker镜像 docker run hello-world Unable to find image hello-world:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline excee…

【C++】简单学——list类

模拟实现之前需要了解的概念带头双向链表&#xff08;double-linked&#xff09;&#xff0c;允许在任何位置进行插入区别相比vector和string&#xff0c;多了这个已经没有下标[ ]了&#xff0c;因为迭代器其实才是主流&#xff08;要包头文件<list>&#xff09;方法构造…

Qt 国际化与本地化完整解决方案

在全球化的今天&#xff0c;软件支持多语言和本地化&#xff08;Internationalization & Localization&#xff0c;简称i18n & l10n&#xff09;已成为基本需求。Qt提供了一套完整的解决方案&#xff0c;帮助开发者轻松实现应用程序的国际化支持。本文将从原理到实践&a…

MNIST 手写数字识别模型分析

功能概述 这段代码实现了一个基于TensorFlow和Keras的MNIST手写数字识别模型。主要功能包括&#xff1a; 加载并预处理MNIST数据集构建一个简单的全连接神经网络模型训练模型并评估其性能使用训练好的模型进行预测保存和加载模型 代码解析 1. 导入必要的库 import matplot…

进阶系统策略

该策略主要基于价格动态分析,结合多种技术指标和数学计算来生成交易信号。其核心逻辑包括: 1. 价格极值计算:首先,策略计算给定周期(由`Var3`定义)内的最高价和最低价,分别存储在`Var12`和`Var13`中。这一步骤旨在捕捉价格的短期波动范围。 2. 相对位置计算:接着,策…

【Linux内核】Linux驱动开发

推荐书籍&#xff1a; 《Linux内核探秘&#xff1a;深入解析文件系统和设备驱动的架构与设计》 知识点 x86的IO地址空间和内存地址空间是独立的两套地址空间&#xff0c;并且使用不同的指令访问。MOV, IN, OUT。内存映射I/O可以将IO映射到内存。ARM等RISC采用统一编编址&#x…

MySQL用户管理(15)

文章目录前言一、用户用户信息创建用户修改密码删除用户二、数据库的权限MySQL中的权限给用户授权回收权限总结前言 其实与 Linux 操作系统类似&#xff0c;MySQL 中也有 超级用户 和 普通用户 之分 如果一个用户只需要访问 MySQL 中的某一个数据库&#xff0c;甚至数据库中的某…

react19相关问题和解答

目录 1. react19将ref放在了props中(不再需要 forwardRef),那么是不是可以通过ref获取子组件的全部变量了? 我的子组件的useImperativeHandle还需要定义吗? 1.1. ref 在 props 中的本质变化 1.2. 为什么不能访问全部变量? 2. In HTML,cannot be a descendant of. Thi…

Code Composer Studio:CCS 设置代码折叠

Code Composer Studio&#xff1a;设置代码折叠,可以按函数&#xff0c;if, 等把代码折叠起来。1.2.开启折叠选项3.开启后&#xff0c;如果文件已经打开&#xff0c;要关掉重新打开文件就可以开到折叠功能生效。

JMeter groovy 编译成.jar 文件

groovy 编译 一、windows 下手动安装Groovy 下载 Groovy 二进制包 前往官网&#xff1a;https://groovy.apache.org/download.html 下载 Binary release&#xff08; https://groovy.jfrog.io/ui/native/dist-release-local/groovy-zips/apache-groovy-sdk-4.0.27.zip &#xf…

使用maven-shade-plugin解决依赖版本冲突

项目里引入多个版本依赖时&#xff0c;最后只会使用其中一个&#xff0c;一般可以通过排除不使用的依赖处理&#xff0c;但是如果需要同时使用多个版本&#xff0c;可以使用maven-shade-plugin解决。以最典型的poi为例&#xff0c;poi版本兼容性很低&#xff0c;如果出现找不到…

[CH582M入门第十一步]DS18B20驱动

学习目标: 1、介绍DS18B20 2、学习单总线 3、学习DS18B20程序驱动一、DS18B20介绍 DS18B20 是一款由 Maxim Integrated(原Dallas Semiconductor) 推出的 数字温度传感器,以其单总线(1-Wire)通信协议、高精度和广泛应用而闻名。以下是其核心特点和应用介绍: 主要特性 数…

SGLang + 分布式推理部署DeepSeek671B满血版

部署设备&#xff1a;28A100 80G&#xff0c;两台机器&#xff0c;每台机器8张A100。 模型&#xff1a;deepseek-671B-int8 模型下载地址&#xff1a;https://huggingface.co/meituan/DeepSeek-R1-Block-INT8 模型参考&#xff1a; 1、SGLang Docker部署 github地址&#…

PCL 间接平差拟合球

目录 一、算法原理 1、计算流程 2、参考文献 二、代码实现 三、结果展示 本文由CSDN点云侠原创,首发于2025年7月24日。博客长期更新,本文最新更新时间为:2025年7月24日。 一、算法原理 1、计算流程 空间球方程: ( x − a ) 2 + ( y − b ) 2 + ( z − c ) 2 = R 2 (1) (…

基于 HAProxy 搭建 EMQ X 集群

负载均衡器&#xff08;LB&#xff09;负责分发设备的 MQTT 连接与消息到 EMQ X 集群&#xff0c;采用 LB 可以提高 EMQ X 集群可用性、实现负载平衡以及动态扩容。 HAProxy简介 HAProxy 是一款高性能的 开源负载均衡器 和 反向代理服务器&#xff0c;主要用于在多个服务器之…