下载及搭建
| 1
2
3
4
 | $ npm install -g verdaccio
$ verdaccio
  warn --- config file  - /home/ubuntu/.config/verdaccio/config.yaml
  warn --- http address - http://localhost:4873/ - verdaccio/2.3.2
 | 
 
终端显示默认配置文件和verdaccio工作端口, 浏览器打开http://localhost:4873/ ,页面如下

    
    配置
default config:
|  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
 |   
  storage: ./storage      # 设置托管或缓存包的存放目录
  auth:                   # 权限控制
    htpasswd:             # 启用 htpasswd 插件管理权限
      file: ./htpasswd    # 制定 htpasswd 文件路径,htpasswd 中存储者用户名和加密过的秘钥
      max_users: 1000     # 最多允许注册用户数
  uplinks:                # 设置外部仓储,如果 verdaccio 找不到请求的包(非 verdaccio 托管),就会查找外部仓储
    npmjs:
      url: https://registry.npmjs.org/
  packages:
    '@*/*':
      access: $all
      publish: $authenticated
      proxy: npmjs
    '**':
      proxy: npmjs
  logs:
    - {type: stdout, format: pretty, level: http}
  web:
    enable: true
    title: Verdaccio
    logo: logo.png
  publish:
    allow_offline: false    # 是否支持离线发布 默认false
  url_prefix: https://dev.company.local/verdaccio/ 
  # 设置资源文件路径前缀。默认不需要设置,但如果使用 nginx 代理并改写了请求路径,就需要指定了。
  max_body_size: 1mb        # 默认JSON document size 1mb
  listen:                   # 设置服务运行地址端口
  # - localhost:4873            # default value
  # - http://localhost:4873     # same thing
  # - 0.0.0.0:4873              # listen on all addresses (INADDR_ANY)
  # - https://example.org:4873  # if you want to use https
  # - [::1]:4873                # ipv6
  # - unix:/tmp/verdaccio.sock    # unix socket
  
 | 
 
- 
uplinks常用仓储有 
| 1
2
3
4
5
6
 |   npmjs:
    url: https://registry.npmjs.org
  yarnjs:
    url: https://registry.yarnpkg.com
  cnpmjs:
    url: https://registry.npm.taobao.org
 |  
 
 
- 
packages: 包访问或发布控制 
- 
{regexp}: 包名匹配正则。
access: 访问控制,可选值有$all(用户不限制), $anonymous(用户不限制), $authenticated(所有登录用户), username( 用户名,需指定具体用户,可指定多个用户,用户间空格隔开,如 secret super-secret-area ultra-secret-area)。尽管@all, @anonymous, all, undefined,
publish: 发布控制,配置请参考 access
proxy: 代理控制,设置的值必选现在 uplinks 中定义。 
- 
常用的包名正则有: 
| 1
2
3
4
 | **         # 匹配任意包
@*/*       # 匹配任意 scope 包
@npmuser/* # 匹配 scope 为 npmuser 的包
npmuser-*  # 匹配包名有 npmuser- 前缀的包
 |  
 
 
包名正则规范通 gitignore 一致,verdaccio 内部使用minimatch实现的,如果需要书写更复杂的正则,可以参考 minimatch 文档。 
 
详情(https://github.com/verdaccio/verdaccio/blob/master/wiki/config.md)
    
    使用
    
    项目初始化
| 1
2
 | $ yarn/npm init
... input some info
 | 
 
    
    coding
    
    注册仓库并添加用户
| 1
2
3
 | npm set registry ip/hostname
npm adduser --registry ip/hostname
input: username/password/email
 | 
 
    
    publish
| 1
2
 | $ yarn/npm pulish
... input some info
 | 
 
    
    install
| 1
2
3
4
 | $ yarn add package-name / npm install package-name
or
$ yarn / npm logout
$ (yarn add package-name / npm install package-name) --registry http://localhost:4873
 | 
 
    
    私有包
现在配置org-前缀的包全部私有
只需在配置文件 config.yml 中 package 段添加配置
| 1
2
3
4
 |   'org-*':
    access: $authenticated
    publish: $authenticated
    proxy: npmjs
 | 
 
这里我们配置了所有org-前缀的包只有注册用户才能访问和发布。
你也可以对 publish 做进一步限制,只有 npmuser 用户才能发布
| 1
2
3
4
 |   'org-*':
    access: $authenticated
    publish: npmuser
    proxy: npmjs
 | 
 
注意修改配置后要重启 verdaccio
    
    scope 包
其实加前缀并不是一种很好组织包的方式,npm 提供了更好的名称空间策略 scope
scope 包包名格式:@scope-name/pkg-name
初始化包时指定 scope
我们可以为 scope 绑定一个仓储
| 1
2
 |   npm login --registry=http://reg.example.com --scope=@org
  npm config set @org:registry http://reg.example.com
 | 
 
这样凡是碰到 scope 为 @org 的包,npm 将自动切换作业仓储到 scope 绑定的仓储,这提供了一种多仓储策略。
scope 私有包配置
| 1
2
3
4
 |   '@org/*':
    access: $authenticated
    publish: $authenticated
    proxy: npmjs
 |