【实录】应用 Verdaccio 从零搭建私有 npm 仓库(含完整步骤及避坑指南)

news/2025/10/12 9:50:04/文章来源:https://www.cnblogs.com/yxysuanfa/p/19136287

在日常开发中,我们经常需要使用 npm 包来加速项目的开发。但有些时候,公司内部会有一些私有组件、工具库不适合直接发布到 npm 公共仓库,这时就需要一个 私有 npm 仓库 来托管。

最近我就亲手搭建了一次,过程踩了一些坑,这里记录下来,或许能帮到有类似需求的你。


为什么要搭建私有 npm?

一开始我们团队内部的做法是,把一些工具库直接放在 GitHub/GitLab 上,用 npm install git+ssh://... 的方式来安装。
这种方式虽然能用,但有几个痛点:

  • 每次安装都要拉整个仓库,速度很慢;
  • 版本管理不够清晰,容易混乱;
  • 无法复用 npm 上的缓存机制。

于是我决定搞一个 私有 npm 服务,既能像用官方 npm 那样方便 install,又能保证内部代码的安全。


技术选型

我调研了一下,常见的方案有两个:

  1. Verdaccio:一个轻量级的私有 npm 服务器,用 Node.js 写的,部署简单,功能也够用。
  2. cnpmjs.org:由阿里开源的企业级 npm 服务器,更重一些,但功能强大。

最后我选择了 Verdaccio,因为我们团队的需求比较轻量,不需要太复杂的功能。


搭建过程

1. 安装 Verdaccio

Node.js 版本要求 v18+

npm install -g verdaccio

在这里插入图片描述

安装完成后,直接运行:

verdaccio

在这里插入图片描述

默认会在本地的 http://localhost:4873 启动服务,浏览器直接访问即可:

在这里插入图片描述


2. 用户登录与发布

首次初始化需先创建用户:

npm adduser --registry http://localhost:4873

后面再次登录可使用命令:

npm login --registry=http://localhost:4873

输入用户名、密码、邮箱之后,就可以发布了:

npm publish --registry http://localhost:4873

发布后就可以看到了

在这里插入图片描述


3. 在项目中使用

为了让 npm 安装包时能访问到我这个私有仓库,需要修改 .npmrc 文件:

registry=http://localhost:4873

这样,所有 npm install 命令都会走我自己的仓库了。

如果只是想 部分包走私有源,可以用作用域的方式,比如:

@my-scope:registry=http://localhost:4873

在项目里,只要 .npmrc 配置正确,就能直接安装:

npm install @my-scope/xxx

如果指向临时指定一下仓库可以:

npm install @my-scope/xxx --registry=http://localhost:4873

4. 维护与更新

更新版本号: 在发布新版本前,需要更新 package.json 中的 version 字段,可以执行 npm version xxx 命令:

npm version patch # 修复bug,小改动 (1.0.0 -> 1.0.1)
npm version minor # 新增功能,向后兼容 (1.0.1 -> 1.1.0)
npm version major # 重大变更,不兼容 (1.1.0 -> 2.0.0)

命令会自动修改 package.json 中的 version 并创建一个 git commit 和 tag。

再次执行 publish 命令即可。


注意事项

package.json 关键项检查

{
"name": "@mycompany/xxxx",
"private": false,
"version": "1.0.12",
"main": "dist/xxxxx.umd.js",
"files": [
"dist"
],
"publishConfig": {
"registry": "http://your-company-npm-registry.com:4873/"
}
}

使用 nrm 管理多个 registry

如果经常需要在官方源和多个私有源之间切换,可以使用 nrm 工具来管理和切换,切换后使用 npm 命令时就会默认指向你设置的 registry。

# 安装 nrm
npm install -g nrm
# 添加私有源
nrm add mycompany http://your-company-registry-url
# 切换到私有源
nrm use mycompany # 切换回官方源: nrm use npm

命令执行顺序

git add .
git commit -m "fix: 修复 xxx 问题"
# 版本号 + 自动生成 commit 和 tag
npm version patch # 或 npm version minor / major
# 把代码和 tag 一起推送
git push origin main --tags
# 构建产物
npm run build
# 发布到 npm
npm publish

总结

通过这次实践,我学会了:

  • 搭建私有 npm 仓库其实很简单,Verdaccio 足够应付大部分团队需求;
  • 使用作用域可以很好地区分私有包和公共包;
  • 搭建完成后,内部工具的发布和复用体验大大提升。

如果你也有类似需求,不妨试试自己搭一个,过程比想象的轻松。

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

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

相关文章

CentOS 7 安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 的详细步骤

CentOS 7 安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 的详细步骤​它是 ​CentOS 7 系统里的一个 ​基础库文件包​(名字叫 bzip2-libs),主要作用是为其他需要压缩/解压功能的软件(比如 bzip2命令行工具或其他依赖它…

2025 年 10 月西安房屋鉴定公司最新推荐排行榜:覆盖房屋安全评估、结构检测、承载力鉴定、危房鉴定领域,助您选专业机构

随着房地产行业不断发展,房屋安全成为民众与企业关注的重点,房屋鉴定作为保障房屋安全的核心环节,其重要性愈发凸显。但当前行业内存在诸多问题,部分机构资质不全、技术团队专业度不足、仪器设备落后,还有些服务流…

完整教程:HAProxy 完整指南:简介、负载均衡原理与安装配置

完整教程:HAProxy 完整指南:简介、负载均衡原理与安装配置pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

单片机学习日记 - 详解

单片机学习日记 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

金铲铲明星学生2触发条件

金铲铲明星学生2触发条件需要2个不同学院棋子吃果实,都吃到明星学生果实,上场后,触发明星学生2。 1:2:3:-

GESP C++5级 2025年6月编程2题解:最大公因数 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

阿里发布「夸克 AI 眼镜」:融合阿里购物、地图、支付生态;苹果拟收购计算机视觉初创 Prompt AI丨日报

这里是 「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的技术」、「有亮点的产品」、「有思考的文章」、「有态度的观点」、「有看点的…

在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名AI聊天框架需求探索

本文基于某知名开源AI聊天框架的文档和用户反馈,深入分析其核心功能特性及应用场景,并挖掘用户提出的潜在新需求,为项目未来发展提供参考方向。a.内容描述核心功能定位:该项目是一个开源AI聊天机器人框架,集成了多…

数论学习之路

完成今日份数论大学习 (是/否)如果不太影响理解与运用的证明 或是我不会的证明 就都不计喽 关于数论分块我就不想写了感觉比较基础线性筛 先来说线性筛 一篇推荐的博客 可 \(O(n)\) 预处理积性函数 常见用法:\(f(1)=1…

CSharp: Aspose.Cells 8.3.0 web excel Viewer

GroupDocsXslViewerGroupDocs.ViewerSupported formatsWord: DOCX, DOC, ODT, RTF, TXT.PowerPoint: PPTX, PPT, ODP.Excel: XLSX, XLS, ODS, Numbers, CSV.Fixed Page Layout: PDF, XPS.Graphics: CDR, DCM, AI, PSD.…

详细介绍:C# WinForms的入门级画板实现

详细介绍:C# WinForms的入门级画板实现2025-10-12 09:08 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

【springboot的分页功能TableDataInfo,有时候需要艰难的分页实现,怎么办呢?】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

生成式AI实现多模态信息检索技术突破

本文介绍了一种基于生成式AI的多模态信息检索框架GENIUS,通过语义量化和查询增强技术,直接生成数据ID代码而非传统向量比对,显著提升了检索效率。该方法在多项测试中性能提升22%-56%,解决了大规模数据集下的检索效…

在运维工作中,如何过滤某个目录在那边什么路径下面?

在 Linux 中,如果你想要查找某个特定目录位于哪个路径下(即查找目录的位置),可以使用以下几种常用的命令来“过滤”或搜索该目录。以下是几种最实用的方法:✅ 1. 使用 find 命令(最常用、最强大) find /path/to…

完整教程:安卓中,kotlin如何写app界面?

完整教程:安卓中,kotlin如何写app界面?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

移动固态硬盘插入电脑后提示“应该格式化”或“文件系统损坏”如何修复?

移动固态硬盘插入电脑后提示“应该格式化”或“文件系统损坏”如何修复?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family:…

PHP 15 个高效开发的小技巧

PHP 15 个高效开发的小技巧 在 PHP 开发中,你不需要依赖新框架也能显著提升效率。真正有用的是那些能节省时间、减少重复工作的小技巧。本文将介绍一些简单但强大的 PHP 技巧,帮助你编写更简洁、更健壮的代码。 原文…

AI元人文构想研究:人类拥抱AI的文明新范式

AI元人文构想研究:人类拥抱AI的文明新范式 摘要:本文提出"AI元人文"理论构想,旨在回应人工智能时代技术与人文价值深度融合的文明需求。该构想基于"价值能量系统"理论模型,通过"悟空之眼…

华为发布星河AI广域网解决方案,四大核心能力支撑确定性网络 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【汇编】汇编语言运行过程

【汇编】汇编语言运行过程 汇编的运行分为以下三个步骤:编辑源程序 汇编源程序及连接源程序 运行.exe文件1. 编辑源程序 利用编辑器编辑源程序,文件扩展名为.ASM。 2. 汇编源程序 汇编语言源程序可使用下列简化命令进…