1. 官方文档
A lightweight Node.js private proxy registry | Verdaccio
2. 相对优点
- 轻量,配置简单,不需要依赖mysql等服务
- 上手快
- 功能全面(权限管理,上游链路等)
- 稳定更新(这里吐槽cnpm都n年没更新了)
3. 安装
3.1 安装CLI
环境要求:
Nodejs | npm |
---|---|
> 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. 配置文件
这里很详细,不做过多介绍
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 中找不到对应的包时,会直接代理到上行链路,这里直接用官方图
官方文档:上行链路 | 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
其中access
,publish
分别指访问,发布权限。$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通知
5.4.2 日志记录
5.4.3 Web用户界面
6. 高级用法
Verdaccio 支持开发插件,可以自定义鉴权等行为,例如可以通过企信对开发者鉴权。
插件开发文档地址:插件 | Verdaccio
版权属于:谁把年华错落成诗 所有,转载请注明出处!
本文链接:https://blog.pomears.com/archives/71.html
如果博客部分链接出现404,请留言或者联系博主修复。
One comment
你写得非常清晰明了,让我很容易理解你的观点。