搭建内网开发环境(五)|基于nexus搭建npm私服

news2024/11/27 4:24:24

引言

在前面一篇教程中,通过 nexus 搭建了 maven 的私服,并通过脚本将本地的依赖文件批量上传到私服中,本文介绍通过 nexus 搭建 npm 私服,同样也通过脚本将本地依赖文件同步到私服中。

  • 搭建内网开发环境(一)|基于docker快速部署开发环境

  • 搭建内网开发环境(二)|Nexus安装及使用

  • 搭建内网开发环境(三)|基于nexus搭建docker私服

  • 搭建内网开发环境(四)|基于nexus搭建maven私服

创建 npm 私库

  1. 创建一个 **npm(hosted)**类型的私库

image.png

  1. 创建一个** npm(group)**仓库组对外服务,将本地的仓库 npm-hosted 添加到仓库组中,如果是外网情况可以在创建一个 proxy 类型的仓库添加在仓库组中。

image.png

收集 npm 依赖

  1. 找一个依赖比较多项目(尽量一次性同步大部分的依赖,后面进行相应补充就行),在有外网的环境中对代码进行编译生成 package-lock.json
  2. 打开 package-lock.json,从 resolved 字段中获取所有的 tgz 文件下载链接

image.png

  1. node-tgz-downloader

node-tgz-downloader 是一个根据 package-lock.json / package.json 文件下载所有 node_modules tgz 文件的工具包

  1. 安装 node-tgz-downloader:npm install node-tgz-downloader -g
  2. 下载 tgz 文件:download-tgz package-json path/to/package.json
  3. node-tgz-downloader 默认会在当前目录下生成一个 tarballs 文件夹,下载好的 tgz 都位于这个文件夹中

编写脚本批量收集并上传

nexus 提供了上传单个依赖组件的 API,通过这个 API 进行批量上传
image.png
将上述步骤编写成脚本,完成安装node-tgz-downloader -> 自动下载依赖 -> 收集 tgz -> 自动上传到私服。

  1. 创建一个文件夹来存放执行脚本、package.json 和生成的临时文件
    1. download_tgz.sh
#!/bin/bash
echo ">>> 开始下载项目依赖... <<<"
npm install
echo ">>> 项目依赖下载完成 <<<"
echo ">>> 开始安装 node-tgz-downloader <<<"
npm install node-tgz-downloader -g
echo ">>> node-tgz-downloader 安装完成 <<<"
echo ">>> 开始收集tgz文件... <<<"
download-tgz  package-json ./package.json
mkdir tgz
find ./tarballs -maxdepth 4 -name "*.tgz" -exec mv {} ./tgz/ \;
echo ">>> tgz文件收集完成 <<<"

echo ">>> 清理中间文件 <<<"
rm -rf ./node_modules
rm -rf ./tarballs
echo ">>> 中间文件结束 <<<"

  2. upload.sh
#!/bin/bash

# 替换下列 nexus 信息为真实信息
## nexus 账号
NEXUS_USER=admin
## nexus 密码
NEXUS_PWD=admin123
## 上传REST API repository后面要换成自己的仓库名称
UPLOAD_COMPONENT_API=10.0.0.3:8081/service/rest/v1/components?repository=npm-hosted

TGZ_DIR=./tgz
dir=$(ls -l $TGZ_DIR | awk '/.tgz$/ {print $NF}')
cd $TGZ_DIR
for file in $dir
do
  echo ">>> $TGZ_DIR/$file 开始上传到npm私服 \n"
  # 替换
  resp=`curl -u $NEXUS_USER:$NEXUS_PWD -X POST "$UPLOAD_COMPONENT_API" -H "Accept: application/json" -H "Content-Type: multipart/form-data" -F "npm.asset=@$file;type=application/x-compressed"`
  echo resp
  echo ">>> $TGZ_DIR/$file 上传完成 \n"
done

  1. 先执行 download_tgz.sh 脚本收集 tgz,在再执行 upload.sh 上传到 npm 私服
    1. 执行 download_tgz.sh:sh download_tgz.sh
    2. 执行 upload.sh:sh upload.sh,记得替换脚本中 nexus 的相关信息
    3. 可通过私服仓库对应的数量变化判断上传情况

image.png

使用私服

创建角色-用户

  1. 创建角色,创建一个前端开发者的角色 npm-publisher,并赋予 npm-hosted 的 读取、添加和修改权限

nx-repository-view-npm-npm-hosted-add
nx-repository-view-npm-npm-hosted-edit
nx-repository-view-npm-npm-hosted-read
image.png

  1. 创建用户,添加一个用户,并赋予 npm-publisher 角色

image.png

  1. 设置Realms,添加 npm Bearer Token Realm

image.png

配置私服地址

添加私服地址

可通过下面 两种方式进行配置,其中 nrm 方式需要先安装 nrm

  1. 通过 nrm add nexus [http://10.0.0.3:8081/repository/npm-repo/](http://10.0.0.3:8081/repository/npm-repo/)
  2. 通过 npm config set registry [http://10.0.0.3:8081/repository/npm-repo](http://10.0.0.3:8081/repository/npm-repo/)/ 设置为默认的仓库

登录私服

通过 npm login 登录私服 ,输入用户名、密码,即可登录成功

从私服下载依赖

如果按照已经设置默认 registry 为私服地址直接 npm i 即可,如果没有设置可直接指定,如:npm i axios --registry [http://10.0.0.3:8081/repository/npm-repo](http://10.0.0.3:8081/repository/npm-repo/)/

上传依赖到私服本地仓库

构建一个 package

  1. 通过 npm init 创建一个包,过程中需要填写参数如下
  • package name(名称)
  • version(版本)
  • description(描述)
  • entry point(主文件也就是入口地址)
  • test command(测试命令,可以先不指定)
  • git repository(git地址,这样就可以从npm官网直接点到git上,可以先不指定)
  • keywords(关键字,用于搜搜索)
  • author(作者)
  • license: (ISC)(包循的开源协议)

image.png

通过 npm publish 发布包

  1. 登录到私服本地仓库,npm login --registry=http://10.0.0.3:8081/repository/npm-hosted
  2. 发布 package 到私服,npm publish -registry http://10.0.0.3:8081/repository/npm-repo
  3. 查看仓库上传成功

image.png

结语

至此,在 nexus 中搭建 npm 私服成功,在本文中介绍了如下大搭建私服,并将本地 package 同步到私服上,另外演示如何在本地使用私服下载和上传 package。

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

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

相关文章

目标检测 | yolov6 原理和介绍

前言&#xff1a;目标检测 | yolov5 原理和介绍 后续&#xff1a; 1.简介 YOLOv6是由美团视觉智能部研发的一款目标检测框架&#xff0c;专注于工业应用&#xff0c;致力于提供极致的检测精度和推理效率。相较于YOLOv4和YOLOv5&#xff0c;YOLOv6在网络结构方面进行了深入优化…

动手学深度学习(pytorch)学习记录12-激活函数[学习记录]

激活函数 激活函数&#xff08;activation function&#xff09;通过计算加权和并加上偏置来确定神经元是否应该被激活&#xff0c; 它们将输入信号转换为输出的可微运算。 import torch import matplotlib.pyplot as plt 简单定义一个画图的函数 def graph_drawing(x_,y_…

Robotics: Aerial Robotics 部分笔记——Week3(2)规划部分

3.2 轨迹不同于路径&#xff0c;需要是光滑的&#xff0c;考虑无人机动力学约束三阶导控制jerk&#xff0c;四阶导控制snap如果轨迹要满足某个特点&#xff0c;如&#xff1a;最短时间、最短路径&#xff0c;此时最优控制思路会被引入&#xff0c;变分法等算法可用以求解,选择…

2024最新版本Python安装及开发环境配置(vscodepython)

python安装 去Python官网下载最新版本&#xff1a; 接下来请一步步按照图片操作&#xff1a; 这样子就安装完成了 测试Python安装是否成功 先打开终端 右键Windows徽标&#xff0c;点击终端 然后输入python&#xff0c;如果如下图所示&#xff0c;就说明安装成功&#xff0…

【深度学习实战】利用Linear Regression预测房价

本文参考了李沐老师的b站深度学习课程 课程链接&#xff0c;使用了线性回归模型&#xff0c;特别适合深度学习初学者。通过阅读本文&#xff0c;你将学会如何用PyTorch训练模型&#xff0c;并掌握一些实用的训练技巧。希望这些内容能对你的深度学习学习有所帮助。 安装pytorch …

【书生大模型实战营(暑假场)】基础任务四 XTuner微调个人小助手认知

基础任务四 XTuner微调个人小助手认知 任务文档视频XTuner微调前置基础 文章目录 基础任务四 XTuner微调个人小助手认知0 认识微调0.1 Fine-tune 的两种范式0.2 常见微调技术 1 微调工具 XTuner1.1 认识高效微调框架 XTuner1.2 XTuner 具有出色的优化效果1.3 XTuner 零显存浪费…

【已成功EI检索】第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

重要信息 会议官网&#xff1a;2024.icceam.com 接受/拒稿通知&#xff1a;投稿后1周内 收录检索&#xff1a;EI, Scopus 会议召开视频 见刊封面 EI检索页面 Scopus 检索页面 相关会议 第六届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2025&#xff09; 大会官网&…

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中&#xff0c;想要获取MAC地址&#xff0c;最开始想到的就是WifiManager&#xff0c;但结果始终返回02:00:00:00:00:00&#xff0c;由于用得是wifi &#xff0c;考虑是不是因为用得网线的原因&#xff0c;但…

【海思SS626 | VB】关于 视频缓存池 的理解

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【C#】explicit、implicit与operator

字面解释 explicit&#xff1a;清楚明白的;易于理解的;(说话)清晰的&#xff0c;明确的;直言的;坦率的;直截了当的;不隐晦的;不含糊的。 implicit&#xff1a;含蓄的;不直接言明的;成为一部分的;内含的;完全的;无疑问的。 operator&#xff1a;操作人员;技工;电话员;接线员;…

OSL 冠名赞助Web3峰会 “FORESIGHT2024”圆满收官

OSL 望为香港数字资产市场发展建设添砖加瓦 &#xff08;香港&#xff0c;2024 年 8 月 13 日&#xff09;- 8 月 11 日至 12 日&#xff0c; 由 香港唯一专注数字资产的上市公司 OSL 集团&#xff08;863.HK&#xff09;冠名赞助&#xff0c;Foresight News、 Foresight Ventu…

C++ 11相关新特性(lambda表达式与function包装器)

目录 lambda表达式 引入 lambda表达式介绍 lambda表达式捕捉列表的传递形式 lambda表达式的原理 包装器 包装器的基本使用 包装器与重载函数 包装器的使用 绑定 C 11 新特性 lambda表达式 引入 在C 98中&#xff0c;对于sort函数来说&#xff0c;如果需要根据不同的比较方式实现…

Springboot日志监听功能

目录 1. 概述1.1. 需求1.2. 思路 2. 功能实现2.1 依赖选取2.2 编写logBack.xml2.3 日志拦截2.4 封装请求为HttpServletRequestWrapper2.5 AOP2.6 日志监听 3. 后记 1. 概述 1.1. 需求 背景&#xff1a;拆分支付系统的日志&#xff0c;把每笔单子的日志单独拎出来存库。每笔单…

如何将高清图片修复?3个方法一键还原图片

如何将高清图片修复&#xff1f;高清图片修复是一个涉及图像处理技术的复杂过程&#xff0c;是对图片进行简单的调整或优化。这个过程旨在最大程度地恢复和提升图片的清晰度、细节和整体视觉效果&#xff0c;使其更加逼真、生动。通过高清图片的修复&#xff0c;我们可以让老旧…

稀疏注意力:时间序列预测的局部性和Transformer的存储瓶颈

时间序列预测是许多领域的重要问题&#xff0c;包括对太阳能发电厂发电量、电力消耗和交通拥堵情况的预测。在本文中&#xff0c;提出用Transformer来解决这类预测问题。虽然在我们的初步研究中对其性能印象深刻&#xff0c;但发现了它的两个主要缺点:(1)位置不可知性:规范Tran…

C++_2_ inline内联函数 宏函数(2/3)

C推出了inline关键字&#xff0c;其目的是为了替代C语言中的宏函数。 我们先来回顾宏函数&#xff1a; 宏函数 现有个需求&#xff1a;要求你写一个Add(x,y)的宏函数。 正确的写法有一种&#xff0c;错误的写法倒是五花八门&#xff0c;我们先来“见不贤而自省也。” // …

windows下部署redis3.2

一、下载redis3.2的包 6.2.6的包也有&#xff0c;但无法安装为Windows服务&#xff0c;暂时舍弃。 直接运行&#xff1a; redis-server redis.windows.conf 修改密码, 对应 redis.windows.conf 中的 requirepass 节点&#xff0c;注意去掉前面的# 修改端口&#xff0c;对应…

缺陷检测AI 重要参数解释

一、参数介绍 基本参数 True Positives (TP) True Positives (TP) 是一个用于评估模型性能的术语。它指的是模型正确预测为正例&#xff08;Positive&#xff09;的样本数量&#xff0c;即实际为正例且被正确分类为正例的样本数量。 False Positives (FP) FP (False Posit…

Python 文件目录操作,以及json.dump() 和 json.load()

import os 是用来引入 Python 标准库中的 os 模块的&#xff0c;这个模块提供了与操作系统交互的功能。这个模块常用于文件和目录操作&#xff0c;比如获取文件的目录路径、创建目录等。 如果你在代码中需要使用与操作系统相关的功能&#xff08;例如获取目录名、检查文件是否…

qt-11基本对话框(消息框)

基本对话框--消息框 msgboxdlg.hmsgboxdlg.cppmain.cpp运行图QustionMsgInFormationMsgWarningMsgCriticalMsgAboutMsgAboutAtMsg自定义 msgboxdlg.h #ifndef MSGBOXDLG_H #define MSGBOXDLG_H#include <QDialog> #include <QLabel> #include <QPushButton>…