使用 Verdaccio 私有化 npm 源指南

使用 Verdaccio 私有化 npm 源指南

  • 使用 Verdaccio 私有化 npm 源指南
    • 介绍
    • 什么是 Verdaccio
    • 为什么选择 Verdaccio
    • 部署 Verdaccio
      • Nodejs 部署
        • 全局
        • 局部
      • Docker 部署
      • 云服务商一键部署
    • 注册用户
    • 发布私有 npm 包
    • 管理 npm 包
    • 项目使用私有源
      • 全量切换
      • 部分切换
    • 结尾
    • 源代码链接

介绍

在日常的工作开发中,我们常常会遇到这样的场景:

公司或团队内部,需要开发和共享一些 逻辑/UI 组件等等的代码,

但是这些代码里面,可能包含一些敏感信息或专有功能,我们不想发布到公开的 npmjs 上去。

这时候我们就需要去搭建 npm 私有源,让这些包只在我们公司内部分享。

那这时候 Verdaccio 就是一个方便的选择。

什么是 Verdaccio

Verdaccio 是一个轻量级的私有 npm 仓库管理工具,它可以帮助我们搭建自己的私有 npm 源。

在这种情况下,使用 Verdaccio 搭建私有 npm 源可以提供以下优势:

  • 安全性:通过搭建私有 npm 源,您可以更好地控制和保护自己的代码。只有授权用户能够访问您的私有源,防止未经授权的人员获取敏感信息或篡改包。

  • 灵活性:通过自定义配置 Verdaccio,您可以根据团队或公司的需求来管理包和版本发布。您可以设置访问权限、存储路径等参数,以满足特定项目的要求。

  • 提高效率:拥有一个专门为团队开发定制的私有 npm 源意味着团队成员之间能够更快速地共享和管理代码。不需要依赖公共 npm 仓库下载、安装包,节省了时间和带宽消耗。

  • 自定义功能:Verdaccio 支持插件机制,允许您扩展其功能,并集成其他服务(如 LDAPGitHub )进行身份验证。这样就可以与现有系统集成,并实现更多定制化功能。

总而言之,在团队开发或者公司内部项目中使用 Verdaccio 私有化 npm 源是一种有效且灵活的方式来管理自定义包,并确保代码安全性与可靠性。通过搭建私有源, 团队能够更好地协作并加快项目进度。

为什么选择 Verdaccio

其实 npm 私有源目前开源主流,只剩下了 VerdaccioNexus 这 2 个项目,还在继续维护,更新频率也高

作为一个这 2 个项目,都用过的开发者,为什么我更推荐 Verdaccio 呢?

  1. 首先,它的社区生态生态更好,插件层出不穷;而 Nexus 的开源版本就相形见绌不少(收费版没用过不知道)
  2. 其次,它是 js 写的,我们前端开发者,可以很方便的编写插件,或者对它的源代码进行修改,添加我们自己的逻辑;而 Nexusjava 写的,需要一些学习成本
  3. 再来,它的使用,以及包的发布,管理,预览方式非常像 npmjs,熟悉 npmjs 的使用它简直 0 成本;而 Nexus 界面,对包信息的展示,简直可以用简陋来形容。
  4. 最后,其实它们 2 者关于 身份验证,权限控制 等等的功能都大差不差的。

当然有人肯定也会说,Nexus 多好啊,部署一份可以支持 maven, npm, docker, pypi … 这么多跨语言的团队,同时都可以使用呢!

诚然,假如你是一个 java 或者 运维人员,这样想是完全没有问题的。

但是,假如你是一名 前端/nodejs,在有主导权的情况下,我建议你选择 Verdaccio

因为其实只有我们前端自己,最懂自己的使用需求。

Nexus 那种通用类型的私有包管理项目,注定照顾不了,每一个细分语言最佳的使用体验!

部署 Verdaccio

Verdaccio 的部署方式很多,都非常的简单,5 分钟内快速上手

Nodejs 部署

全局

安装好 ltsnodejs 之后,直接全局安装:

# npm
npm i -g verdaccio
# yarn
yarn global add verdaccio
# pnpm
pnpm i -g verdaccio

这时候,一个 verdaccio 的命令会被注册在全局

执行 verdaccio -v 查看版本,显示版本号,代表你安装成功!

然后执行 verdaccio,你的私有源就在本地顺利启动了,启动日志如下所示。

 info --- config file  - /Users/icebreaker/.config/verdaccio/config.yamlinfo --- the "crypt" algorithm is deprecated consider switch to "bcrypt" in the configuration file. Read the documentation for additional detailsinfo --- using htpasswd file: /Users/icebreaker/.config/verdaccio/htpasswdinfo --- plugin successfully loaded: verdaccio-htpasswdinfo --- plugin successfully loaded: verdaccio-auditwarn --- http address - http://localhost:4873/ - verdaccio/5.30.3

从启动日志中可以提取出几个重要信息:

  1. 加载配置的位置,默认情况下会在全局用户文件夹里,初始化一个 config 文件
  2. 用户名密码 hash 的存储文件 htpasswd 的位置
  3. 加载的插件信息
  4. 监听的 ip 和端口,默认是 localhost:4873,所以这时候是无法被其他机器访问到的

想要被其他机器访问到,需要去修改 config.yaml 这样反注释修改端口:

listen:- 0.0.0.0:4873

这样就能被内网里的其他机器访问到了,当然前提你要先开放(添加)你机器的端口出入规则

局部

同样我们可以创建文件夹,在里面初始化一个 package.json 文件

然后依次创建 config.yaml 并添加 start 命令即可:

{"name": "npm-proxy-verdaccio","scripts": {"start": "verdaccio --config ./config.yaml"},"dependencies": {"verdaccio": "^5.30.3"}
}

Docker 部署

在安装 docker 之后,我们可以创建一个 docker-compose.yml:

version: "3.1"
name: npm-proxy-verdaccioservices:verdaccio:image: verdaccio/verdacciocontainer_name: "verdaccio"networks:- node-networkenvironment:- VERDACCIO_PORT=4873ports:- "4873:4873"volumes:- "./storage:/verdaccio/storage"- "./config:/verdaccio/conf"- "./plugins:/verdaccio/plugins"
networks:node-network:driver: bridge

然后使用 docker compose up -d 就能顺利启动了, 不过这种方式需要自己准备 config.yaml 文件放入容器卷中。

云服务商一键部署

这种主要是国外的云服务商支持,我们用的比较少,详见:

https://verdaccio.org/docs/installation#cloudron

注册用户

部署完了之后我们开始注册用户,打开本机的 http://0.0.0.0:4873/ 可以看到页面

Image

我们本地执行 npm adduser --registry http://0.0.0.0:4873/

按照顺序,输入我们的用户名密码邮箱

完成之后, verdaccio 目录下会出现一个 htpasswd 文件

里面格式如下:

icebreaker:xxxxxx:autocreated 2024-04-08T14:23:03.152Z

同时你全局的 .npmrc 里面出现:

//0.0.0.0:4873/:_authToken="xxxxxxx"

这代表你可以发包了!

发布私有 npm 包

发布私有 npm 包可以很简单,也可以很复杂(各种编译)

这里我们按照简单的来, 创建一个 test-pkg 文件夹,初始化 package.json

{"name": "test-pkg","version": "0.0.0","description": "","main": "index.js","scripts": {},"keywords": [],"files": ["index.js"],"author": "","license": "ISC","publishConfig": {"access": "public","registry": "http://0.0.0.0:4873/"}
}

然后随便创建个 index.js 写点啥,就可以直接在项目里执行 npm publish

发布成功之后可以看到,我们的包已经上传上去了!

Image

点击进入详情:

Image

可以看到,界面元素和 npmjs 也差不多,也是可以查看 README.md 和各种版本依赖的。

管理 npm 包

此时我们上传 npm 包后,相关的文件就被上传到 config.yaml 里配置的 storage 里去了

这里我们配置的是 storage: ./storage,所以所有包的位置都在这

Image

在这里我们就能对包进行删除等等操作了,比如想让某个包在列表里看不见,直接把它在 .verdaccio-db.json 文件里删去即可。

项目使用私有源

默认情况下,Verdaccio 是开启 proxy npmjs 模式的

这个意思就是,你向它请求安装的包,假如 Verdaccio 里面没有的话,会去 npmjs 上找,然后返回给用户,同时也放在 Verdaccio 服务器本地缓存下来,这样下次同样的包就会命中缓存。

但是同样,这也会带来一些问题,比如全量代理之后,服务器 SSD 容量够不够大,需不需要定期清理那些用不上的 npm 包的问题。这种看各个团队/运维的需求和能力,所以项目里一般也是分为 2 种方式去使用它。

全量切换

顾名思义,全部的 npm 包都从 Verdaccio 服务器获取。

方式也很简单,只需要在 .npmrc 里添加:

registry=http://0.0.0.0:4873/

然后删掉 lock 文件,重新安装即可

部分切换

显式指明我们自己的包,在 Verdaccio npm 私有仓库中的的完整路径。(指明 tgz 包的版本)

// package.json
{"dependencies": {"xxx": "http://xxxx"}
}

或者,可以在在 .npmrc 里显式指定特定包的特定注册源

xxxx:registry=http://xxxx
# @scoped/xxx
@xxx:registry=http://xxxx

这样我们 package.json 里面就不会出现这种不和谐( http: / npm: / git:)的版本号了。

结尾

写到这里,发现文字写的太多了,太长的文章没人看,所以这篇文章就到此为止。

但是实际上 Verdaccio 还有很多强大的功能,推荐大家去尝试尝试。

源代码链接

https://github.com/sonofmagic/npm-proxy-verdaccio

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

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

相关文章

网络篇10 | 网络层 IP

网络篇10 | 网络层 IP 01 简介02 名称解释03 IP报文格式(IPv4)1)4位版本协议(version)2)4位首部长度(header length)3)8位服务类型(Type Of Service, TOS)4)16位总长度5)16位(分片)标识6)3位(分片)标志7&am…

Spring Cloud 集成 RabbitMQ

目录 前言步骤引入相关maven依赖添加相关配置 使用方法配置消息序列化创建第一个消息队列和交换机使用方法 总结 前言 在当今的微服务架构盛行的时代,消息队列作为一种重要的通信机制,在分布式系统中扮演着不可或缺的角色。RabbitMQ,作为一款…

ASP.NET公交车管理系统的实现与设计

摘 要 随着经济的日益增长,信息化时代已经到来,生活中各种信息趋向数字化、清晰化。公交车作为现代城市生活中一种重要的交通工具,其数量增多,车型也不再单一,雇用的司机增多,这样使得公交车公司的车辆信…

XTTS数据迁移方案

前置条件检查 XTTS使用限制较多,V3版本按照本节逐项检查 目标库操作系统不能是windows 源库:redhut 7.9 目标库:redhut 7.9 检查数据库时区(两边都需要) SQL> select dbtimezone from dual; 检查结果两边都一致…

机器学习和深度学习--李宏毅 (笔记与个人理解)Day 16

Day 16 deep Learning – 鱼与熊掌兼得 最近在减重, 昨天跑了个一公里,然后今天上午又打了个篮球,真是老胳膊老腿了,运动完给我困得不行 Review 见前面的笔记 这里说dl 会提供一个足够大的模型, 来使得Dall loss 足够小…

Unity类银河恶魔城学习记录12-14 p136 Merge Skill Tree with Sword skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili CharacterStats.cs using System.Collections; using System.Collections.…

【氮化镓】GaN HEMTs结温和热阻测试方法

文章《Temperature rise detection in GaN high-electron-mobility transistors via gate-drain Schottky junction forward-conduction voltages》,由Xiujuan Huang, Chunsheng Guo, Qian Wen, Shiwei Feng, 和 Yamin Zhang撰写,发表在《Microelectroni…

绿联HDMI延长器40265使用AG7120芯片放大器方案

HDMI延长器和放大器 延长器:主要用于HDMI线的延长,有HDMI对接头方式延长,或HDMI公头加HDMI母头的HDMI线进行延长,或通过网线方式延长,早期为双网线,目前已发展为单网线,需要注意的是&#xff0…

NLP_知识图谱_图谱问答实战

文章目录 图谱问答NERac自动机实体链接实体消歧 多跳问答neo4j_graph执行流程结构图![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1577c1d9c9e342b3acbf79824aae980f.png)company_data![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/20f567d877c743b…

【core analyzer】core analyzer的介绍和安装详情

目录 🌞1. core和core analyzer的基本概念 🌼1.1 coredump文件 🌼1.2 core analyzer 🌞2. core analyzer的安装详细过程 🌼2.1 方式一 简单但不推荐 🌼2.2 方式二 推荐 🌻2.2.1 安装遇到…

TCP/IP 协议栈在 Linux 内核中的 运行时序分析

1、Linux内核概述 1.1 Linux内核结构 一个完整的Linux内核一般由5部分组成,它们分别是内存管理、进程管理、进程间通信、bai虚拟文件系统和网络接口。 1、内存管理 内存管理主要完成的是如何合理有效地管理整个系统的物理内存,同时快速响应内核各个子…

数据可视化基础与应用-04-seaborn库人口普查分析--如何做人口年龄层结构金字塔

总结 本系列是数据可视化基础与应用的第04篇seaborn,是seaborn从入门到精通系列第3篇。本系列主要介绍基于seaborn实现数据可视化。 参考 参考:我分享了一个项目给你《seaborn篇人口普查分析–如何做人口年龄层结构金字塔》,快来看看吧 数据集地址 h…

7 种实现 CSS 三角形的原理与方法 以及 三角形在网页设计中的作用

三角形在网页设计中不仅是图形设计的基本元素,更是实现视觉引导、空间构建、情绪传达、品牌塑造、性能优化以及创新表达的重要工具。其广泛应用和多功能性使其成为设计师手中不可或缺的设计语言组成部分。本文介绍了7种CSS实现三角形的方法。 CSS实现三角形主要有以…

MYSQL执行过程和顺序详解

一、前言 1.1、说明 就MySQL在执行过程、sql执行顺序,以及一些相关关键字的注意点方面的学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方,欢迎指出纠错&…

Project Euler_Problem 159_Digital Root Sums of Factorisations

原题目&#xff1a; 解题思路&#xff1a; 代码&#xff1a; void solve() {ll i, j,k,x,y,z,p,q,u,v;N 1000000, NN 1024;//N 20;double a, b, c,d;M.NT.get_prime_Euler(2000000);for (i 2; i < N; i) {x (i-1)%91;for (j 2; j<sqrt(i); j) {if (i % j 0) {x …

宝妈如何在家创造收入?五种兼职工作让你轻松赚钱!

许多宝妈为了陪伴孩子成长&#xff0c;毅然选择了全职妈妈的角色&#xff0c;然而&#xff0c;她们内心仍希望能有一份收入&#xff0c;实现经济独立。于是&#xff0c;寻找既能照顾家庭又能赚钱的工作成了她们的迫切需求。 然而&#xff0c;这样的需求也往往让宝妈们成为一些…

Linux三剑客-sed、awk、egrep(上)

一、知识梗概 二、正则表达式 定义&#xff1a;正则表达式是一种强大的文本处理工具&#xff0c;用于在文本中搜索符合特定模式的字符串。它由一系列特殊字符和普通字符组成&#xff0c;可以定义复杂的搜索模式。正则表达式被广泛应用于各种编程语言和文本处理工具中。 简单来…

antDesignVue 使用-持续更新

背景 vue3viteantdesignvuevue-router 1,全局完整注册 1.1下载antdesignvue npm i --save ant-design-vue 或者 npm install ant-design-vuenext --save 1.2在mian.ts中引入 import { createApp } from vue import { createPinia } from piniaimport App from ./App.vue …

微信跳转页面时发生报错

报错如下图所示&#xff1a; 解决方法&#xff1a;&#xff08;从下面四种跳转方式中任选一种&#xff0c;哪种能实现效果就用哪个&#xff09; 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

读书笔记:高效能人士的七个习惯

前言 恐惧感和不安全感 现代社会&#xff0c;太多的人饱受恐惧感的折磨。他们恐惧将来&#xff0c;恐惧失业&#xff0c;恐惧无力养家。这种弱点&#xff0c;常常助长了一种倾向&#xff1a;无论在工作时&#xff0c;还是回到家中&#xff0c;都倾向于零风险的生活&#xff0…