1. 官方文档

A lightweight Node.js private proxy registry | Verdaccio

2. 相对优点

  1. 轻量,配置简单,不需要依赖mysql等服务
  2. 上手快
  3. 功能全面(权限管理,上游链路等)
  4. 稳定更新(这里吐槽cnpm都n年没更新了)

3. 安装

3.1 安装CLI

环境要求:

Nodejsnpm
> 12> 5

使用npm

npm i -g verdaccio

然后启动服务

verdaccio

3.2 使用Docker

这里就直接使用docker-compose.yml

version: '3.1'

services:
  verdaccio:
    image: verdaccio/verdaccio
    container_name: "verdaccio"
    network_mode: host
    volumes:
      - "$storage:/verdaccio/storage"
      - "$config:/verdaccio/conf"
      - "$plugins:/verdaccio/plugins"

如果使用这种方式,verdaccio不会生成默认的config.yaml文件,对应的文件可以在这里获取:

verdaccio/docker.yaml at 5.x · verdaccio/verdaccio (github.com)

将取到的文件存放到上述docker-compose.yml文件的$config路径中,如$config/config.yaml

然后配置目录权限

chown -R 10001:65533 $storage
chown -R 10001:65533 $config
chown -R 10001:65533 $plugins

然后启动服务

docker compose up

4. 配置文件

配置文件 | Verdaccio

这里很详细,不做过多介绍

5. 常用场景用法或配置样例

5.1 账户鉴权相关

官方文档:认证 | Verdaccio

以下样例基于默认的认证器htpasswd这里是默认认证器仓库地址

配置样例

auth:
  htpasswd:
    file: ./htpasswd
    max_users: 1000

5.1.1 禁止注册

max_users修改为-1

5.1.2 允许注册的情况下,自主注册账户

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

注册成功后, htpasswd 文件会多一个加密串

同时npm 会将 Verdaccio 返回的 Token 保存在配置文件.npmrc中,它存放于您的用户主目录下。 如需了解更多有关于 .npmrc 相关的内容,请查阅 官方文档

cat .npmrc
registry=http://localhost:4873/
//localhost:4873/:_authToken="secretVerdaccioToken"
//registry.npmjs.org/:_authToken=secretNpmjsToken

5.1.3 手动添加账户

这里使用用户名以及密码生成加密串,然后追加到 htpasswd 文件中

5.2 上行链路

当 Verdaccio 中找不到对应的包时,会直接代理到上行链路,这里直接用官方图

5415e6018144

官方文档:上行链路 | Verdaccio

配置样例

uplinks:
  npmjs:
   url: https://registry.npmjs.org/
  server2:
    url: http://mirror.local.net/
    timeout: 100ms
  server3:
    url: http://mirror2.local.net:9000/
  baduplink:
    url: http://localhost:55666/

5.2.1 设置CNPM上行链路

如果使用系统环境变量NPM_TOKEN,直接将token_env设置为true即可

uplinks:
  CNPM:
    url: https://registry.npmmirror.com
    auth:
      type: bearer
      token_env: true

或者直接指定 token

uplinks:
  CNPM:
    url: https://registry.npmmirror.com
    auth:
      type: bearer
      token_env: "token"

5.2.2 缓存下载的远程 tar 包

uplinks:
  CNPM:
    url: https://registry.npmmirror.com
        cache: true
    auth:
      type: bearer
      token_env: "token"

5.3 包的访问控制

官方文档:包的访问 | Verdaccio

约束一系列包的访问控制,这里以组件库的包@test为例

注意库定义的顺序很重要同时必须使用双通配符

配置样例

packages:
  '@test/*':
    access: $all
    publish: $all
  '**':
    access: $all
    publish: $all
    proxy: npmjs

其中accesspublish分别指访问,发布权限。$all则是用户组,代表所有人

5.3.1 透传组件库到标品源

packages:
  '@test/*':
    access: $all
    publish: $all
    proxy: CNPM
  '**':
    access: $all
    publish: $all
    proxy: npmjs

5.3.1 限制访问以及发布权限为认证过的用户

packages:
  '@test/*':
    access: $authenticated
    publish: $authenticated
  '**':
    access: $all
    publish: $all
    proxy: npmjs

5.3.3 限制权限到具体用户

这里以用户xiaoming为例

packages:
  '@test/*':
    access: xiaoming
    publish: xiaoming
  '**':
    access: $all
    publish: $all
    proxy: npmjs

5.4 其他

5.3.1 webhook通知

通知 | Verdaccio

5.4.2 日志记录

记录器 | Verdaccio

5.4.3 Web用户界面

Web 用户界面 | Verdaccio

6. 高级用法

Verdaccio 支持开发插件,可以自定义鉴权等行为,例如可以通过企信对开发者鉴权。

插件开发文档地址:插件 | Verdaccio

Last modification:December 28, 2022
If you think my article is useful to you, please feel free to appreciate