背景:外包项目完工后,需要搭建客户开发环境,因此需要将对应的npm开发包迁移到客户nexus
步骤:
? ? 1.先从前端工程中的yarn.lock文件中获取组件列表
? ? ?2.使用python脚本下载组件到本地
? ? ?3.使用pythons脚本上传npm包到nexus仓库
? 第2不脚本如下:
# -*- coding: utf-8 -*-
import os
import requests
import re
# 设置下载文件保存目录
download_dir = "C:\\Users\\onlyo\\Desktop\\LJ\\npmdowlod\\pkg"
# 从文件中读取 URL 列表
url_file = "C:\Users\\onlyo\\Desktop\\LJ\\npmdowlod\\url.txt"
# 创建下载目录(如果不存在)
#os.makedirs(download_dir, exist_ok=True)
# 打开 URL 列表文件
with open(url_file, "r") as file:
print("Hello, World!1")
# 逐行读取 URL
for line in file:
print(line)
# 提取 URL 链接部分
#url = line.strip().split()[1].strip('"')
url = re.search(r'"(https?://.*?)"', line).group(1)
print("读取到的url为:"+str(url))
# 检查 URL 是否以 "https://" 开头
if url.startswith("http://"):
# 提取文件名
filename = url.rsplit("/", 1)[-1]
#last_slash_index = url.rfind("/")
# hash_index = url.rfind("\"")
# 提取子字符串
#filename = url[last_slash_index + 1 : hash_index]
# 下载文件
print("下载文件:", filename)
response = requests.get(url)
file_path = os.path.join(download_dir, filename)
with open(file_path, "wb") as output_file:
output_file.write(response.content)
第三步脚本如下:
# -*- coding: utf-8 -*-
import os
import requests
import glob
# 远程Nexus仓库的URL和认证信息
nexus_url = 'http://192.168.2.230:8081/service/rest/v1/components'
headers = {
'accept': 'application/json',
'Content-Type': 'multipart/form-data'
}
auth = ('admin', 'admin') # 替换为你的Nexus仓库的用户名和密码
# 本地npm包的路径和要上传的远程仓库名
local_path = 'D:\\lj2\\' # 替换为包含.tgz文件的本地文件夹路径
remote_repo = 'npm-imbr-hosted' # 替换为要上传到的远程仓库名称
# 遍历本地文件夹中的.tgz文件
for tgz_file in glob.glob(os.path.join(local_path, '*.tgz')):
print('开始上传'+tgz_file)
auth = ('admin', 'admin') # 替换为你的Nexus仓库的用户名和密码
url = 'http://192.168.2.230:8081/service/rest/v1/components?repository=npm-imbr-hosted'
files = {'file': open(tgz_file, 'rb')} # 这里替换为你的文件路径
response = requests.post(url,auth=auth, files=files)
print('完成')
print(response.text) # 打印服务器响应