verdaccio

因为技术变革太快,注意知识的时效性。

verdaccio是基于node开发的一个库,用来搭建私有的npm仓库。因为npm仓库大多数是公有的免费的,私有仓库或者企业版是收费的,在单位内部或者个人一些私有的模块需要托管的时候就需要自己搭建一个私有的仓库,而verdaccio就是选择之一,最便捷的一种。

安装verdaccio

参照官方文档,而且是中文版哟~~~。

注意: node.js的版本要求

1
2
3
4
5
6
7
8
9
10
11
# 全局安装
npm i -g verdaccio

# 启动
verdaccio

# 使用forever或者pm2能够启动verdaccio到后台
# 后台运行
forever start `which verdaccio`
# 或者
pm2 start which verdaccio

配置verdaccio

配置文件路径参考:https://verdaccio.org/docs/zh-CN/cli

windows: C:\Users\用户名\.config\verdaccio\config.yaml

自定义端口号

1
2
listen:
0.0.0.0:10086

添加taobao源

1
2
3
4
5
uplinks:
npmjs:
url: https://registry.npmjs.org/
taobao:
url: https://registry.npm.taobao.org

配置packages

官方参考

  1. 配置私有包的规则

    建议私有的包都添加统一的前缀或者使用 @npmuser/ 这样的小组范围类型。

    1
    2
    3
    4
    packages:
    'npmuser-*':
    access: npmuser
    publish: npmuser

    这样配置npmuser-*开头的包,发布的时候全部都发布到verdaccio中。而且之能npmuser这个用户使用。

    1
    2
    3
    4
    5
    6
    7
    packages:
    'npmuser-*':
    access: $authenticated
    publish: $authenticated

    # verdaccio内置使用htpasswd插件验证,内置的小组名称有:
    # '$all', '$anonymous', '@all', '@anonymous', 'all', 'undefined', 'anonymous'

    这样配置就是npmuser-*包,只能登陆的用户使用。

  2. 配置proxy

    修改默认的proxyuplinks中的taobao

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    packages:
    '@*/*':
    # scoped packages
    access: $all
    publish: $authenticated
    proxy: taobao # 引用了uplinks中的配置

    '**':
    access: $all
    publish: $authenticated
    proxy: taobao # 引用了uplinks中的配置

配置npm的registry

建议使用nrm管理registry

详情参考这篇文章

1
2
3
4
# 添加本地的verdaccio
nrm add local http://127.0.0.1:4873
# 切换到local
nrm use local

私有模块发布和使用

发布私有的模块前,要先使用nrm切换到verdaccio发布的registry,并且写先注册一个用户,然后才能发布模块

  1. 切换registry

    1
    nrm use local
  2. 使用npm注册一个账户

    1
    2
    3
    4
    npm adduser # 注册用户
    # 注意这个账户不是npmjs.com的账户,这个账户只是注册到自己发布的verdaccio服务中
    # verdaccio使用htpasswd来验证用户密码
    # verdaccio有插件可以使用自己搭建的gitlab用户来验证。
  3. 发布模块

    1
    2
    3
    4
    # 例如: node项目为node-demo
    # node-demo目录下执行
    # 发布之前注意修改package.json中的version版本号
    npm publish
  4. 使用私有模块

    1
    2
    # 例如:私有模块名称为:pvt-node
    npm i pvt-node