利用 Verdaccio 搭建 Npm 包管理私服

利用 Verdaccio 搭建 Npm 包管理私服

之前开发项目的过程中,多多少少都会沉淀积累一些组件,后来队伍越来越大,项目越来越多,通过拷贝粘贴的方式干重复的事情总感觉太low,想着能不能通过高雅的方式来解决这些重复工作,于是就想到了自己来搭建一个npm私服试试,这里我选的是Verdaccio

什么是 Verdaccio

“一个基于 Node.js 的轻量级私有仓库”。 平时使用 npm publish 进行发布时,上传的仓库默认地址是 npm,通过 Verdaccio 工具在本地新建一个仓库地址,再把本地的默认上传仓库地址切换到本地仓库地址即可。当 npm install 时没有找到本地的仓库,则 Verdaccio 默认配置中会从 npm 中央仓库下载。

运行环境的nodejsnpm版本如下:

C:> node -v
v16.20.2
C:> npm -v
8.19.4

一、安装和配置

话不多说,接下来我们就直接安装 verdaccio

npm install -g verdaccio

默认安装在 /usr/local/bin/verdaccio,相关的配置文件在 /etc/verdaccio/config.yaml,这里我们看看配置文件的内容,这里只挑几个重要的说说(其他的后续用到再完善)。

storage: ./storage
storage: ./storage

设置托管或缓存包的存放目录 ,即所有的请求过的包均被缓存在这个目录下;

auth
auth:
  htpasswd:
     file: ./htpasswd
     max_users: 10

权限控制,file指定的是用户存储的文件及路径,通过 npm adduser添加的用户均被添加到此文件中:

alt

如果要删除用户,直接从这里删除也是可以的。

uplinks:
  mirror:
    url: https://registry.npmmirror.com/
  taobao:
    url: https://registry.npm.taobao.org/
  npmjs:
    url: https://registry.npmjs.org/

设置外部仓储,如果 verdaccio 找不到请求的包(非 verdaccio 托管),就会查找外部仓储。常见格式的有 :

  • {name}: 外部仓储名称
    • url: 访问路径
    • timeout: 超时
    • maxage: 默认值 2m,2m 钟内不会就同样的请求访问外部仓储
    • fail_timeout: 如果外部访问失败,在多长时间内不回重试
    • headers: 添加自定义 http 头当外部仓储访问请求中,例如authorization: "Basic YourBase64EncodedCredentials=="
    • cache: 是否启用缓存,默认启用。

更多uplinks配置

publish
publish:
  allow_offline: true

设置允许离线发包,因为verdaccio是在线检查包的合法性,在很多局域网内容使用时,允许离线发包很有用,能解决发布时检测失败的问题(503错误)。

二、启动和管理

启动 verdaccio有三种方案,

第一种是直接启动,关闭窗口即停止:

/usr/local/bin/verdaccio --config /etc/verdaccio/config.yaml

第二种是静默启动:

nohup /usr/local/bin/verdaccio --config /etc/verdaccio/config.yaml >/dev/null 2>log &

将这种方式包装到一个shell脚本中:

#!/bin/bash

ip_addr=$(ip addr | grep eth0 | grep inet | awk '{print $2}' | cut -d / -f 1)

echo 'vedaccio 启动成功,server as http://'$ip_addr

nohup /usr/local/bin/verdaccio --config /etc/verdaccio/config.yaml >/dev/null 2>log &

exit 0

第三种是通过pm2来管理verdaccio进程:

npm install -g pm2
#查看状态
pm2 status verdaccio
#启动
pm2 start verdaccio
#停止
pm2 stop verdaccio
#重启
pm2 restart verdaccio

启动后,可以通过 http://127.0.0.1:4873访问页面:

alt

三、发包管理

发包管理主要包含注册、登录、发布、管理包几个部分,和 公共npm包管理器一样

#注册
npm adduser -registry=http://127.0.0.1:4873
#登录
npm login -registry=http://127.0.0.1:4873
#发布
npm publish -registry=http://127.0.0.1:4873
#撤销发布
npm unpublish [packageName]@[version] -registry=http://127.0.0.1:4873

撤销发布时,可以指定版本,也可以全部撤销发布,如 npm unpublish [packageName]@*

常见的包管理及信息查询命令如下:

npm view [packageName] 查看包的详细信息
npm view [packageName] versions 查看所有版本信息
npm view [packageName] version 查看当前版本信息
npm ls [packageName] [-g] 查看包当前安装的版本
-g标示全局查看
此命令需要在某个具体的项目目录下查看

发布后,可以通过 http://127.0.0.1:4873访问页面:

alt