Verdaccio是JS生态中搭建私有npm仓库最轻量、可靠且落地最快的方案,纯文件存储、零数据库依赖、配置简单,支持内网安全发布私有包(如@yourorg/utils)并缓存公共包(如lodash),全程不暴露源码、不依赖外网。

在 JS 生态中,用 Verdaccio 搭建私有 npm 仓库是轻量、可靠且落地最快的方案。它不依赖数据库,纯文件存储,配置简单,适合中小团队快速上线并长期维护。
核心目标明确:让团队能安全发布 @yourorg/utils 这类内部包,同时也能缓存安装 lodash 等公开包,所有操作走内网,不暴露源码、不依赖外网。
怎么快速搭起来(开发/测试环境)
- 确保已安装 Node.js(推荐 v18.x LTS)和 npm(v9+)
- 全局安装 Verdaccio:
npm install -g verdaccio
- 启动服务:
verdaccio
默认监听
http://localhost:4873,打开浏览器就能看到 Web UI,说明已就绪。
首次启动后,Verdaccio 会自动生成默认配置文件:
- Linux/macOS:
~/.config/verdaccio/config.yaml - Windows:
%APPDATA%\verdaccio\config.yaml
关键配置项怎么设(生产可用)
打开 config.yaml,重点改这几块:
指定存储路径(避免包存在用户目录)
storage: /var/verdaccio/storage
启用密码认证(别用默认的 $all 开放发布)
auth:
htpasswd:
file: /var/verdaccio/htpasswd
max_users: 1000生成管理员账号(先全局装 htpasswd):
npm install -g htpasswd htpasswd -Bc /var/verdaccio/htpasswd admin
设置上游代理(缓存公共包)
uplinks:
npmjs:
url: https://registry.npmjs.org/定义权限规则(推荐按命名空间隔离)
packages:
'@yourorg/*':
access: $authenticated
publish: $authenticated
proxy: npmjs
'**':
access: $all
publish: $authenticated
proxy: npmjs这样:
- 所有用户都能
npm install公共包(如react) - 只有登录用户能发布包
- 只有登录用户能下载
@yourorg/*包(比如@yourorg/api-client)
怎么发布和使用私有包
在你要发布的项目里:
-
package.json中 name 必须带作用域,例如:"name": "@yourorg/logger", "version": "1.2.0"
- 加上发布配置:
"publishConfig": { "registry": "http://your-server-ip:4873/" }
登录并发布:
npm adduser --registry http://your-server-ip:4873 npm publish
其他成员安装时:
- 临时切换 registry:
npm install @yourorg/logger --registry http://your-server-ip:4873
- 或配全局 registry(慎用,会影响所有项目):
npm config set registry http://your-server-ip:4873
更推荐在项目根目录加 .npmrc 文件:
registry=http://your-server-ip:4873 //your-server-ip:4873/:_authToken="你的token"
token 可从 ~/.npmrc 复制,或用 npm login --registry ... 自动生成。
生产环境加固建议
-
反向代理 + HTTPS:用 Nginx 做前置,绑定域名(如
npm.yourorg.com),强制 HTTPS,隐藏端口。 -
进程守护:用 PM2 启动,避免终端关闭就停服:
pm2 start verdaccio --name npm-registry
-
定期备份:
/var/verdaccio/storage和/var/verdaccio/htpasswd是核心数据,建议每日压缩归档。 - 权限审计扩展(可选):通过插件接入 LDAP 或 OAuth,对接企业统一身份系统。
Verdaccio 本身没有复杂后台或管理界面,但胜在稳定、透明、易排查——日志直连 stdout,配置即代码,改完 reload 即生效。真正难的不是搭,而是推动团队规范使用作用域、统一 registry 配置、建立发布流程。


















