verdaccio私有仓库搭建

搭建过程

安装node环境

下载最新的node环境,下载地址:https://nodejs.org/en/download/current/

wget https://npm.taobao.org/mirrors/node/v16.8.0/node-v16.8.0-linux-x64.tar.xz

tar -xf node-v16.8.0-linux-x64.tar.xz 

mv node-v16.8.0-linux-x64 /usr/local/

#配置环境变量
echo 'export NODE_HOME=/usr/local/node-v16.8.0-linux-x64'  >> /etc/profile
echo 'export PATH=$PATH:$NODE_HOME/bin'  >> /etc/profile
echo 'export NODE_PATH=$NODE_HOME/lib/node_modules'  >> /etc/profile

source /etc/profile

#查看版本
node -v

 安装verdaccio

npm i -g verdaccio 

#查看帮助
verdaccio -h

#直接启动
verdaccio

启动后会在启动目录下生成生文件,编辑配置文件添加 listen: 0.0.0.0:4873

vim verdaccio/config.yaml
# 添加监听端口
listen: 0.0.0.0:4873

 

verdaccio 默认配置如下

cat  verdaccio/config.yaml|grep -v "#"|grep -v "^$"
listen: 0.0.0.0:4873
storage: ./storage
plugins: ./plugins
web:
  title: Verdaccio
auth:
  htpasswd:
    file: ./htpasswd
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
server:
  keepAliveTimeout: 60
middlewares:
  audit:
    enabled: true
logs: { type: stdout, format: pretty, level: http }

 配置中参数介绍

storage

配置发布到私有仓库包的存放地址,默认存放verdaccio/storage中,可以定期将该文件的内容进行清理,但一定要谨慎,应为该文件存放的包不止我没自己发布的,还有一些重共有仓库中拉取并缓存的包。

 

uplink

也许,包不止发布到一个仓库,如果公司按照业务线划分了几个前端部门,部门之间的技术独立但能共享,这时如果想使用自己发布的npm私有包的同时,还期望可以使用其他团队开发的npm包,这时候就可以通过指定改参数实现,换句话说,npm公有仓库也可以理解为我们的另一个仓库,像这样的仓库还有淘宝的仓库等,配置如下,这里只是做了一个定义,真正的使用其实在包的packages管理参数中

uplink:
  npmjs:
    url: https://registry.npmjs.org
  taobao:
    url: https://registry.npm.taobao.org/

 

packages

该参数是整个配置文件中最重要的一个,因为通过该配置参数,能达到包设定权限,设定该包的发布和使用权限,设置该包是否代理到公有仓库等。

packages:
  '@boluome/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs

 通过以上的参数配置,就约定了,如果你发布的包是 @boluome 前缀的那就表明是私有包,不会代理到外部。 如果发布的包没有 @boluome 前缀,这会走 ** 的逻辑,即前缀不包含 @boluome 的包。 proxy: npmjs 指明了如果该报上传则会被代理到npm公有仓库中,如果下载某一个不包含 @boluome 前缀的包时,会自动代理到npm公有仓库查找资源并下载,并且会默认拉取的资源缓存到 storage 文件中。

  • web 界面相关的配置

  • auth 用户相关,例如注册、鉴权插件(默认使用的是 htpasswd)

  • server 私有库服务端相关的配置

  • middlewares 中间件相关配置,默认会引入 auit 中间件,来支持 npm audit 命令

  • logs 终端输出的信息的配置

 

权限

权限指的是我们需要私有 npm 库上发布的包只能团队成员查看。需要做这 2 件事:

  • 限制 npm 包的查看,只能为已注册的用户

  • 禁止用户注册(注册完成后)

# 默认配置
packages:
  '@*/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs

 

它有三个可选值 $all(所有人)、$anonymous(未注册用户)、$authenticated(注册用户)

  • access 控制包的访问权限
  • publish 控制包的发布权限
  • unpublish 控制包的删除权限

设置好 packages 后,还得更改 auth 的值,因为此时注册用户是没有限制的,也就是说如果你的私有 npm 库部署在外网环境的话,任何人都可以通过 npm adduser 命令注册用户.

 

这里需要设置 auth 的 max_users 为 -1,它代表的是禁用注册用户

auth:
  max_user: -1
# 需要要开启用户注册,设置指定数字(大于 0)即可

 

当出现下面问题错误的时候,说明你的npm包太大,超过限制

413 Payload Too Large - PUT http://xxx- request entity too large

max_body_size: 100mb

 

使用pm2启动verdaccio

npm i -g pm2

pm2 start `which verdaccio`

pm2 startup

pm2 save

 

posted @ 2021-09-07 17:36  第七爻  阅读(522)  评论(0编辑  收藏  举报