使用verdaccio搭建私有npm仓库

介绍

verdaccio是一个npm包管理工具,其特点是可以托管私有模块,并且带有缓存功能,当私有仓库中找不到对应模块的时候,会去npm公服上面下载,并缓存起来

verdaccio 对应的前身是sinopia,由于sinopia的作者已经不维护了,所以我们使用维护更新积极的verdaccio,在配置使用上,verdaccio和sinopia无区别,容易上手

部署

verdaccio依赖nodejs和npm环境,没有安装node环境的同学请移步到node官网下载安装,准备好nodejs环境后,使用npm安装verdaccio

npm install --global verdaccio

安装完毕可以直接运行verdaccio开启私有npm服务,但是我们一般不会这样做,如果需要对verdaccio进行一些启动配置,在路径:
/users/用户名/.config/verdaccio下增加一个config.yaml文件

#
# This is the default config file. It allows all users to do anything,
# so don't use it on production systems.
#
# Look here for more config file examples:
# https://github.com/verdaccio/verdaccio/tree/master/conf
#
# 建议在安全上多做考虑,因为这个registry在开发环境和生产环境我们都是需要的
listen: 0.0.0.0:4873

# path to a directory with all packages
storage: ./storage

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
# 使用淘宝的cnpmjs镜像,加速
uplinks:
  npmjs:
    url: https://registry.npm.taobao.org/

# 识别@syt/xxxx这样的package为Private的,其他的@xx/yyy都会到upstream去获取
packages:
  '@syt/*':
    # scoped packages
    access: $all
    publish: $authenticated
    proxy: npmjs

  '**':
    # allow all users (including non-authenticated users) to read and
    # publish all packages
    #
    # you can specify usernames/groupnames (depending on your auth plugin)
    # and three keywords: "$all", "$anonymous", "$authenticated"
    access: $all

    # allow all known users to publish packages
    # (anyone can register by default, remember?)
    publish: $authenticated

    # if package is not available locally, proxy requests to 'npmjs' registry
    proxy: npmjs

# log settings
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: verdaccio.log, level: info}

一般我们都会使用pm2守护进程去启动verdaccio,避免断开连接后服务关闭,这里需要安装一下pm2

$ npm install -g pm2
$ pm2 start verdaccio # 让pm2启动verdaccio

启动后,我们打开浏览器http://0.0.0.0:4873,可以部署上私有npm的模块

增加用户&发布模块

首先,全局安装nrm可以快速修改,切换,增加npm镜像地址

npm install -g nrm # 安装nrm
nrm add local http://0.0.0.0:4873 # 添加本地的npm镜像地址
nrm use local # 使用本地npm地址

nrm的其他命令:

$ nrm --help  # 查看nrm命令帮助
$ nrm list # 列出可用的 npm 镜像地址

切换到公司的npm镜像后,就可以用标准的npm命令增加用户,发布包

$ npm addUser
$ npm publish

参考资料

https://verdaccio.org/docs/zh-CN/configuration
https://blog.csdn.net/YYZZHC999/article/details/80100388