简介:本文详细介绍如何使用 Verdaccio 搭建私有 npm 源,涵盖安装配置、权限管理、镜像加速、CI/CD 集成及故障排查,助力企业实现高效安全的包管理。
在现代化软件开发中,npm 生态已成为前端和 Node.js 开发的核心依赖。然而,公共 npm 注册表(registry.npmjs.org)存在三大痛点:
Verdaccio 作为轻量级私有 npm 代理仓库,完美解决了这些问题。它支持本地缓存、权限控制、多存储后端(如本地文件系统、S3、数据库),且兼容 npm、yarn、pnpm 等主流客户端。
# 全局安装(推荐)npm install -g verdaccio# 启动服务(默认端口 4873)verdaccio
访问 http://localhost:4873 即可看到 Web 界面。
Verdaccio 的核心配置位于 ~/.config/verdaccio/config.yaml(Linux/macOS)或 %APPDATA%\verdaccio\config.yaml(Windows)。关键配置项:
# 存储路径(默认 ~/.local/share/verdaccio/storage)storage: ./storage# 监听端口listen: 0.0.0.0:4873# 上游公共源(缓存加速)uplinks:npmjs:url: https://registry.npmjs.org/# 包访问权限packages:'@*/*':access: $authenticatedpublish: $authenticated'**':access: $allpublish: $authenticated# 认证配置auth:htpasswd:file: ./htpasswd# 日志配置logs:- {type: stdout, format: pretty, level: http}
Verdaccio 支持基于组的权限控制,通过 htpasswd 文件管理用户:
# 生成密码文件(需安装 apache2-utils)htpasswd -c ./htpasswd admin# 添加用户htpasswd ./htpasswd dev1
在配置文件中定义组:
users:admin:name: admingroups: ['admin']dev1:name: dev1groups: ['developers']packages:'@company/*':access: developerspublish: developers'@company/core':access: adminpublish: admin
通过 uplinks 配置多级缓存:
uplinks:npmjs:url: https://registry.npmjs.org/cache: truemax_fails: 3fail_timeout: 30scnpm:url: https://r.cnpmjs.org/cache: true
客户端配置(.npmrc):
registry=http://your-verdaccio-server:4873strict-ssl=false
storage: /var/verdaccio/storage
store:amazon-s3:bucket: your-bucketkeyPrefix: verdaccioregion: us-west-2accessKeyId: YOUR_ACCESS_KEYsecretAccessKey: YOUR_SECRET_KEY
store:mongo-db:url: mongodb://localhost:27017/verdacciocollection: packages
pipeline {agent anystages {stage('Install Dependencies') {steps {sh 'npm config set registry http://verdaccio-server:4873'sh 'npm install'}}stage('Publish Package') {steps {withCredentials([usernamePassword(credentialsId: 'verdaccio-creds', usernameVariable: 'NPM_USER', passwordVariable: 'NPM_PASS')]) {sh 'echo "//verdaccio-server:4873/:_authToken=${NPM_PASS}" > ~/.npmrc'sh 'npm publish'}}}}}
name: Publish to Verdaccioon:push:tags:- 'v*'jobs:publish:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: actions/setup-node@v2with:node-version: '14'registry-url: 'http://verdaccio-server:4873'- run: npm ci- run: npm publishenv:NODE_AUTH_TOKEN: ${{ secrets.VERDACCIO_TOKEN }}
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 503 错误 | 存储空间不足 | 清理旧包或扩展存储 |
| 403 禁止访问 | 权限配置错误 | 检查 packages 配置和用户组 |
| 连接超时 | 防火墙限制 | 开放 4873 端口 |
| 包版本冲突 | 缓存未更新 | 手动清除缓存或重启服务 |
| 特性 | Verdaccio | Nexus Repository |
|---|---|---|
| 部署复杂度 | 低(单文件) | 高(需要数据库) |
| 成本 | 免费 | 商业许可 |
| 扩展性 | 插件机制 | 完整企业功能 |
| 适用场景 | 中小团队/开发环境 | 大型企业生产环境 |
verdaccio-audit: 生成依赖审计报告verdaccio-memory: 内存缓存插件verdaccio-google-auth: Google 账号登录Verdaccio 以其轻量级、高可定制化的特性,成为企业私有 npm 源的首选方案。通过合理配置,可实现:
未来发展方向包括:
建议企业从开发环境开始试点,逐步扩展到预发布和生产环境,最终构建完整的私有包管理生态。