批量导入Npm包依赖到Nexus私服(批量上传脚本)
创始人
2024-02-08 22:18:09
0

背景

批量导入是在以下几点情况下产生的需求:

  • 已有Nexus系统,在测试构建环境中
  • Nexus系统为离线环境不能配置外网代理自动下载
  • 项目代码工程所在工作电脑有条件联网
  • 现需要将项目代码在测试构建环境中连接Nexus私服进行编译构建

基于上面几点情况,产生了需要将联网环境的依赖包批量上传到内网环境的Nexus中的需求。

不想了解过程的,可以直接到文章底部拷贝 “脚本内容” 直接使用,文章前面都是解释说明性内容。

方法说明

1、在有网络的环境中,对代码进行编译构建,生成 package-lock.json 或者 yarn.lock,具体使用 npm 还是 yarn 取决于你自己的实际需求。

在这里插入图片描述

2、打开 lock 文件,从 resolved 字段中获取所有的 tgz 文件下载链接(你可以使用这则表达式匹配或者使用一些工具批量处理提取)。

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

3、将获得的所有 tgz 文件链接进行批量下载到一个文件夹中(比如可以使用迅雷批量下载)。

在这里插入图片描述

你可以按需精确挑选依赖包下载,也可以比较方便的统一处理全部下载,后面使用脚本批量上传的时候,多次重复上传同一个包没有影响,私服会忽略仓库中已经存在的包。

4、打开浏览器登录Nexus,确定你需要上传到的目标 repository 名称。

在这里插入图片描述

5、在API菜单中获取上传包的API,如下图所示:

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

这段 curl 命令,我们在脚本中使用,原理即循环所有 tgz 文件循环调用 api 接口进行上传。

脚本内容

#!/bin/bash# 获取命令行参数
while getopts ":r:u:p:" opt; docase $opt inr) REPO_URL="$OPTARG";;u) USERNAME="$OPTARG";;p) PASSWORD="$OPTARG";;esac
done# find 并批量上传
find . -type f -name '*.tgz'  | sed "s|^\./||" | xargs -I '{}' \
curl -u "$USERNAME:$PASSWORD" -X 'POST' -v \${REPO_URL} \-H 'accept: application/json' \-H 'Content-Type: multipart/form-data' \-F 'npm.asset=@{};type=application/x-compressed' ;

将脚本 npmimport.sh 放在 tgz 文件所在目录中,然后一并上传到一个任意 Linux 服务器上,文件结构示例如下:

[root@test npm-tgz-packages]# ll
total 120
-rw-r--r-- 1 root root 97346 Nov 22 16:07 autocomplete-core-1.7.1.tgz
-rw-r--r-- 1 root root 19476 Nov 22 21:13 autocomplete-preset-algolia-1.7.1.tgz
-rwxr-xr-x 1 root root   461 Nov 22 22:43 npmimport.sh
[root@test npm-tgz-packages]# tree -C
.
├── autocomplete-core-1.7.1.tgz
├── autocomplete-preset-algolia-1.7.1.tgz
└── npmimport.sh0 directories, 3 files

脚本使用

cd npm-tgz-packages/
./npmimport.sh -u admin -p 123456 -r http://nexus.demo.com/service/rest/v1/components?repository=npm-shanhy

在这里插入图片描述

注:如果你疑问为什么不用 npm publish 命令发布 tgz 文件到 nexus 呢?解释原因就是因为这个命令需要你的环境要预装 npm 环境,而我们使用 bash 脚本却是通用的,可以随便找个 linux 服务器运行就可以。
如果你刚好有 npm 环境,并且没有批量发布 tgz 包的需求,发布个别几个 tgz 包的话直接使用 npm publish 会很方便。


(END)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...