内网私仓全流程搭建记录(二)-npm私仓提交与拉取
1、npm私仓依赖下载及本地上传
方法一
1)使用Pycharm创建py文档,写入如下py代码:
import os
import re
import aiohttp
import asyncio
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor # 创建存储文件夹
download_folder = "sourcenpm"
os.makedirs(download_folder, exist_ok=True) # 读取文件内容
with open("package-lock.json", "r") as file:
content = file.read() # 使用正则表达式匹配resolved字段的值
pattern = r'"resolved":\s+"(https:\/\/[^"]+\.tgz)"'
matches = re.findall(pattern, content) # 异步下载函数
async def download_file(session, url):
async with session.get(url) as response:
if response.status == 200:
parsed_url = urlparse(url)
filename = os.path.basename(parsed_url.path)
full_filename = os.path.join(download_folder, filename)
content = await response.read()
with open(full_filename, "wb") as output_file:
output_file.write(content) print(f"文件 {filename} 下载成功")
else:
print(f"无法下载文件 {url}") async def download_with_semaphore(semaphore, session, url):
async with semaphore:
await download_file(session, url) async def main():
# 创建异步HTTP会话
async with aiohttp.ClientSession() as session:
semaphore = asyncio.Semaphore(8) # 限制并发数为8
tasks = []
for url in matches:
tasks.append(download_with_semaphore(semaphore, session, url))
await asyncio.gather(*tasks) print("下载完成") # 运行异步下载
if __name__ == "__main__":
asyncio.run(main())
2)将vue项目中的package-lock.json文件放到本py脚本目录下,执行该py脚本,package-lock.json中的依赖文件自动下载到新建的sourcenpm文件夹中,下载完成后将sourcenpm文件夹拷贝到内网中;
3)编写上传脚本npmimport.sh,win10环境下,使用powershell执行./npmimport.sh命令,代码如下:
find . -type f -name '*.tgz' | sed "s|^\./||" | xargs -I '{}' \
curl -u 'admin:123456' -X 'POST' -v 'http://127.0.0.1:19999/service/rest/v1/components?repository=npm-test' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'npm.asset=@{};type=application/x-compressed';
在Linux中执行./npmimport.sh -u admin -p 123456 -v http://127.0.0.1:19999/service/rest/v1/components?repository=npm-test命令,代码如下:
find . -type f -name '*.tgz' | sed "s|^\./||" | xargs -I '{}' \
curl -u "$USERNAME:$PASSWORD" \
-v ${REPO_URL} \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'npm.asset=@{};type=application/x-compressed';
方法二、
1)将本地编译后代码目录路径下已生成的node_modules拷贝到内网中,在node_modules文件夹中新建npm2nexus.sh文件,执行./npm2nexus.sh命令,npm2nexus.sh内容如下:
#!/bin/bash
#通过本脚本批量上传本地node_modules中的npm依赖包到私仓nexus3内
#将本本脚本文件npm2nexus.sh放在本地node_modules文件夹中即可
file_name="package.json" # 要查找的文件名
search_path="D:\VueWorkspace\RuoYi-Vue\ruoyi-ui\node_modules" # 本地node_modules路径 result=$(find $search_path -type f -iname "$file_name") # 使用find命令查找文件
if [ ! -z "$result" ]; then # 如果结果不为空
while IFS= read -r file; do # 对于每个找到的文件
echo "File found at: $(dirname "$file")" # 输出文件所在的目录
# 这里可以添加其他操作或者调用函数处理该文件
filepath=$(dirname "$file")
cd "$filepath"
npm publish --registry 'http://127.0.0.1:19999/repository/npm01/' #nexus私仓地址
cd "$search_path"
done <<< "$result"
else
echo "No files matching '$file_name' were found." # 没有找到符合条件的文件时的提示信息
fi
注:无论通过下载还是直接通过node_modules文件上传,都可能存在相关依赖包无法正常下载或上传等情况,需要区别对待,或单独补充。
内网私仓全流程搭建记录(二)-npm私仓提交与拉取的更多相关文章
- linux服务器外网内网(双网络)搭建
一共有2台服务器,分别用a,b表示.a双网卡,即有外网也有内网.b只有内网环境.a,b的内网是通过交换机组建.至于外网怎么搭建我就不说了.关键说一说内网是怎么组建的. 如果你对linux不熟悉,对网卡 ...
- 挖坑:handoop2.6 开启kerberos(全流程学习记录)
目录: 1.涉及插件简介 2.安装步骤 3.日志错误查看 1.kerberos是什么东西 度娘指导: Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为 客户机 / 服务器 应用程序提供 ...
- Gradle AndroidStudio内网离线构建配置踩坑记录
最近一家新公司,由于办公环境都是在内网机上,导致在Unity导出android工程后,gradle离线构建也是第一次搞,花了一天时间也踩了一些坑,最后也终于构建成功了,这里记录下,方便大家少走些弯路. ...
- 持续集成(二)环境搭建篇—内网邮件server搭建
在我们的持续构建中,项目构建中出现错误提醒.或者开发者之间的沟通交流,进度汇报的事务,都是离不开一个通信工具.那就是邮件.在我们的项目开发中假设使用第三方的邮件平台,这肯定不是最好的选择.由于第三方的 ...
- nat123外网SSH访问内网LINUX的N种方法
一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限,LINUX主机部署在路由内网.如何实现外网SSH访问内网LINUX主机? 2,解决方案: 使用nat123动态域名解 ...
- Linux渗透+SSH内网转发
http://www.jb51.net/hack/58514.html http://blog.chinaunix.net/uid-756931-id-353243.html http://blog. ...
- 基于4G Cat.1的内网穿透实例分享
上一篇分享了:小熊派4G开发板初体验 这一篇继续BearPi-4G开发板实践:内网穿透实验. 基本TCP的socket通信测试 之前我们学习WiFi模块时,与PC进行TCP协议的socket通信测试我 ...
- 烂泥:openvpn双网卡客户端与内网机器通信
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 前段时间写了一篇有关openvpn搭建与内网机器通信的文章,那篇文章是基于服务器单网卡 ...
- 外网SSH访问内网LINUX的N种方法
外网SSH访问内网LINUX的N种方法 http://www.nat123.com/Pages_8_260.jsp 一,动态公网IP环境 1,环境描述: 路由器分配的是动态公网IP,且有路由管理权限, ...
- QuantumTunnel:内网穿透服务设计
背景 最近工作中有公网访问内网服务的需求,便了解了内网穿透相关的知识.发现原理和实现都不复杂,遂产生了设计一个内网穿透的想法. 名字想好了,就叫QuantumTunnel,量子隧道,名字来源于量子纠缠 ...
随机推荐
- 用python做时间序列预测八:Granger causality test(格兰杰因果检验)
如果想知道一个序列是否对预测另一个序列有用,可以用Granger causality test(格兰杰因果检验). Granger causality test的思想 如果使用时间序列X和Y的历史值来 ...
- JUC并发—11.线程池源码分析
大纲 1.线程池的优势和JUC提供的线程池 2.ThreadPoolExecutor和Excutors创建的线程池 3.如何设计一个线程池 4.ThreadPoolExecutor线程池的执行流程 5 ...
- 探秘Transformer系列之(6)--- token
探秘Transformer系列之(6)--- token 0x00 概述 语言是人类特有的概念.作为一个抽象符号,人是可以理解每个语言单词的意义的,但是现在的NLP语言模型无法直接的从感知中抽象出每个 ...
- 小米10至尊纪念版—官方稳定版一键 TWRE刷入+面具ROOT
1.解锁BL http://www.miui.com/unlock/index.html 2.备份+关机(虽然不会清理数据,但是小心为上) 3.音量下+开机进入fastboot模式 4.解压压缩包,运 ...
- MySQL - mysql 面试题
事务的四个特点是什么?他们的实现原理是什么? 事务的四个特点是ACID,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). ...
- Spark 保存本地josn格式文件运行报错 IDEA运行异常java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/Function
报错信息: java.lang.NoClassDefFoundError: org/apache/spark/api/java/function/Function at java.lang.Class ...
- 寒武纪平台上传 Docker 镜像
前言 学校的算力平台更换为了寒武纪平台,相较于以前简单的通过 Linux 用户隔离,使用门槛有所提升.但从整体来看,这样拥有更好的隔离性,在 docker 中即便搞崩了也可以重新来过,可以避免因他人的 ...
- 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
一.Windows 版 DeepSeek-R1.Ollama 与 AnythingLLM 介绍及核心使用场景 一.组件功能与定位 DeepSeek-R1 模型特性:支持 FP16 计算 ...
- FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 🚀
title: FastAPI 参数别名与自动文档生成完全指南:从基础到高级实战 date: 2025/3/10 updated: 2025/3/10 author: cmdragon excerpt: ...
- Trae 开发工具与使用技巧
大家好,我是 V 哥. 前不久,字节重磅推出 AI 原生 IDE Trae,有了这款工具,程序员的开发效率得到了大大的提升,如何你是程序员,还没有使用起来,那 V 哥建议你即刻起马上安装上,谁用谁知道 ...