安装与启动

1. 全局安装verdaccio

1
2
3
// 加上--unsafe-perm选项是为了防止gyp ERR! permission denied权限问题报错
npm install --global verdaccio --unsafe-perm
// 对于 verdaccio@4.0.0-alpha.x 或 verdaccio@4.x版本, Node 8.x (LTS "Carbon") 是最低支持版本, 建议安装nvm进行node版的切换。

2. 全局安装pm2

1
npm install --global pm2

如果安装失败,可以尝试 npm cache clean -f 后重新安装。

3. 启动verdaccio

1
2
pm2 start verdaccio
pm2 log verdaccio // 或者使用 pm2 log 对应的id
1
2
3
4
5
// 表示启动成功, 打开 http://localhost:4873 可以看到页面。
0|verdacci | warn --- config file - /Users/jinbiao/.config/verdaccio/config.yaml
0|verdacci | warn --- Plugin successfully loaded: verdaccio-htpasswd
0|verdacci | warn --- Plugin successfully loaded: verdaccio-audit
0|verdacci | warn --- http address - http://localhost:4873/ - verdaccio/4.1.0

4. 配置config.yaml

1
2
3
4
logs:
- { type: stdout, format: pretty, level: http }
#- {type: file, path: verdaccio.log, level: info}
listen: 0.0.0.0:4873 // 在文件最后,添加listen这一行 表示可以通过外网访问
1
pm2 restart verdaccio // 或者使用 pm2 restart 对应的id

verdaccio配置

1.默认配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# #号后面是注释
# 所有包的缓存目录
storage: ./storage
# 插件目录
plugins: ./plugins

#开启web 服务,能够通过web 访问
web:
# WebUI is enabled as default, if you want disable it, just uncomment this line
#enable: false
title: Verdaccio
#验证信息
auth:
htpasswd:
# 用户信息存储目录
file: ./htpasswd
# Maximum amount of users allowed to register, defaults to "+inf".
# You can set this to -1 to disable registration.
#max_users: 1000

# a list of other known repositories we can talk to
#公有仓库配置
uplinks:
npmjs:
url: https://registry.npmjs.org/

packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated

#代理 表示没有的仓库会去这个npmjs 里面去找 ,
#npmjs 又指向 https://registry.npmjs.org/ ,就是上面的 uplinks 配置
proxy: npmjs

'**':
# 三种身份,所有人,匿名用户,认证(登陆)用户
# "$all", "$anonymous", "$authenticated"

#是否可访问所需要的权限
access: $all

#发布package 的权限
publish: $authenticated

# 如果package 不存在,就向代理的上游服务发起请求
proxy: npmjs

# To use `npm audit` uncomment the following section
middlewares:
audit:
enabled: true
# 监听的端口,IP,重点,不配置这个,只能本机能访问
listen: 0.0.0.0:4873
# log settings
logs:
- {type: stdout, format: pretty, level: http}
#- {type: file, path: verdaccio.log, level: info}

2.缓存,上游,及更新原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
uplinks:
someRegisry:
url: http://172.18.128.218:4873/

packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated

#代理 表示没有的仓库会去这个 someRegisry 里面去找 ,
#someRegisry 又指向 http://172.18.128.218:4873/ ,就是上面的 uplinks 配置
proxy: someRegisry

'**':
# 三种身份,所有人,匿名用户,认证(登陆)用户
# "$all", "$anonymous", "$authenticated"

#是否可访问所需要的权限
access: $all

#发布package 的权限
publish: $authenticated

# 如果package 不存在,就向代理的上游服务发起请求
proxy: npmjs

image

上图表示verdaccio先去上游地址请求到了包,然后把包返回给客户端,并且缓存了.tgz压缩包。

image

存到了 ~/.config/verdaccio/storage 之中

image

上图表示第二次还是请求这个模块的时候,verdaccio会去上游查找,并且和本地缓存对比,发现没有区别,所有直接从缓存返回。

image

image

上图表示,上游模块发生了更新,所以继续到上游地址请求包,然后把包返回给客户端,并且缓存了.tgz压缩包。

verdaccio官方文档