在内网搭私有 npm 源并缓存公共包(Verdaccio)
Verdaccio 是用 TypeScript 写的轻量级私有 npm registry,自带小型数据库,可代理并缓存 npmjs.org 等上游,让团队在内网发布与复用 npm 包。本文讲清它的安装前提、最短启动路径、结果落在哪里,以及集群与存储上的边界,帮你判断它是否适合当前的内网与 CI 场景。
团队内网要装 npm 包,直接指向公网源有两个麻烦:私有包不能公开,公网源一旦抖动,或者某个包被下架,构建就断。Verdaccio 把这两件事收进一个进程里解决。
Verdaccio 是一套用 TypeScript 写的轻量级私有 npm registry,自带小型数据库,能代理并缓存 npmjs.org 等上游源,让团队在内网发布、复用 npm 包。

它同时承担三种角色:私有包仓库、上游源的缓存代理、多个 registry 的聚合出口。启动不依赖外部数据库,代理下载过的模块留在本地,同一个版本再次安装时直接从缓存返回。项目采用 MIT 许可证,仓库地址是 https://github.com/verdaccio/verdaccio ,Star 17905,主要语言 TypeScript 占 94.5%。
装它需要什么
- Node.js:本仓库 master 分支与
next-9发布线要求 v24 或更高;6.x分支要求 Node.js 22 以上。 - 包管理器:npm、yarn、pnpm 任选一种,也可以走 Docker 镜像或 Helm chart。
- 端口:默认监听 4873,本机需要能占用这个端口。
- 数据库:不需要。Verdaccio 自带一个小型数据库,装上就能用。
- 存储扩展(可选):要接 Amazon S3、Google Cloud Storage 这类服务,需要另外安装社区插件。
跑起来
- 全局安装:
npm install -g verdaccio@next-9;换 yarn 是yarn global add verdaccio@next-9,换 pnpm 是pnpm i -g verdaccio@next-9。 - Docker 方式:
docker pull verdaccio/verdaccio:nightly-master。 - Helm 方式:
helm repo add verdaccio https://charts.verdaccio.org,接着helm repo update,再helm install verdaccio/verdaccio。 - 启动服务:在终端执行
verdaccio。 - 可选地把 npm 指向它:
npm set registry http://localhost:4873/;只对单次命令生效则用NPM_CONFIG_REGISTRY=http://localhost:4873 npm i。
输出是什么
服务默认跑在 http://localhost:4873/ ,浏览器打开能看到本地包列表并支持搜索。包的元数据与缓存都落在 Verdaccio 自己的小型数据库和本地存储里,不需要额外配置。
判断这次跑成功很简单:终端里 verdaccio 进程没有报错退出,页面能打开,执行 npm publish 之后新包出现在列表中,代理过的公共包在公网不可用时仍能从缓存安装。
先说它做不到什么
它不支持 PM2 的 cluster 模式,README 里对这一点有明确标注,想靠多进程横向扩展行不通。
集群部署有过一段历史问题:早期的 Verdaccio 与 sinopia 在内部缓存了一份包列表,不重新解析 .sinopia-db,多节点同时跑时数据会不一致。这条 Issue 当前标记为已解决。
默认存储只有自带的本地小型数据库。想换成对象存储或其他后端,得自己安装社区插件,仓库里没有内置这些能力。
几个已经被修掉的坑也值得知道:大包下载会报 Unexpected EOF while installing/downloading large packages;scoped 包发布曾因斜杠转义失败;Windows Server 上出现过只留下 package.json、不保存 tarball;Docker 容器里 /config/ 目录映射到宿主机曾导致容器起不来。这些在后续版本中都处理掉了。
单机跑一个内网私有源、给 CI 做端到端测试、把多个上游 registry 收成一个出口,这些场景 Verdaccio 够用,README 里提到 create-react-app、pnpm、storybook 等项目都在这么做。需要多节点高可用、或者想要完全托管服务的团队,得先自己解决集群与存储插件这两块,它本身不提供。
焚评:这个项目的量化评分
本项目的选题来自 焚.com(一个按公开公式给 GitHub 项目打分的站)。焚评当前总分 10.0 分(满分 10)。下表是各维度的得分:
| 评分维度 | 得分 |
|---|---|
| 热度动量(权重 25%) | 10.0 / 10 |
| 开发活跃(权重 25%) | 10.0 / 10 |
| 社区响应(权重 15%) | 10.0 / 10 |
| 文档质量(权重 15%) | 10.0 / 10 |
| 发布节奏(权重 10%) | 9.9 / 10 |
| 风险控制(权重 10%) | 10.0 / 10 |
评分口径、权重与计算方式见焚.com 的评分方法页;数据随 GitHub 指标刷新,具体数值以焚.com 当前页面为准。本文正文为诀.com 独立撰写,评分数据由焚.com 授权引用。
内容核验说明
一篇偏部署前的判断材料:Verdaccio 把私有包仓库、上游缓存和聚合出口收进一个进程,不依赖外部数据库,最短启动路径与结果落在哪里都写清楚了。适合在单机内网搭私有源、给 CI 做端到端测试的团队先看。集群高可用和对象存储要自己上插件,README 对此有明确标注;Node 版本要求、缓存行为等数据来自项目方公开披露,诀.com 未独立验证。
文中的 Node 版本要求、Star 数、语言占比、许可证、默认端口等信息来自项目仓库与焚.com 的公开披露,诀.com 未独立验证;已修复缺陷列表引用自仓库 README,未在当前版本复现确认。焚评分数由焚.com 按其公开公式计算,属其口径。用户反馈摘要
根据仓库 Issue 来看,多条反馈集中在部署与权限细节:插件安装文档缺失、大包下载报 Unexpected EOF、认证用户在 Web UI 下载 tarball 返回 401、注册用户登录报 409、scoped 包因斜杠转义发布失败,以及 6.0.5 升到 6.1.2 后界面看不到包。另有提交者报告集群多节点缓存不同步、Docker 4.0.0 升级后包全部消失、缓存存在多版本时拉取 tarball 失败。这些 Issue 状态均为已解决,反映的是历史版本问题。
基于该仓库公开 Issue 整理,只反映提交者报告的现象与诉求,不代表诀.com 立场,也不代表问题已被确认。项目来源与说明
开源项目:verdaccio(verdaccio)
本文由诀.com 编辑基于该项目的公开信息独立撰写,属原创解读,不是对项目文档的翻译或转载;文中提到的功能与参数以官方仓库为准,代码与文档版权归原作者所有。
查看项目仓库