北鸟南游的博客 北鸟南游的博客
首页
  • 前端文章

    • JavaScript
    • Nextjs
  • 界面

    • html
    • css
  • 计算机基础
  • 后端语言
  • linux
  • mysql
  • 工具类
  • 面试相关
  • 图形学入门
  • 入门算法
  • 极客专栏
  • 慕课专栏
  • 电影资源
  • 儿童动漫
  • 英文
  • 棋牌益智
  • 两性知识
  • 健康知识分享
关于我
归档
GitHub (opens new window)
首页
  • 前端文章

    • JavaScript
    • Nextjs
  • 界面

    • html
    • css
  • 计算机基础
  • 后端语言
  • linux
  • mysql
  • 工具类
  • 面试相关
  • 图形学入门
  • 入门算法
  • 极客专栏
  • 慕课专栏
  • 电影资源
  • 儿童动漫
  • 英文
  • 棋牌益智
  • 两性知识
  • 健康知识分享
关于我
归档
GitHub (opens new window)
  • 后端
  • 计算机基础
  • Linux
  • Mysql
  • 开发工具
    • Docker
    • git
    • markdown语法
    • rollup
    • verdaccio搭建npm服务器
    • vite
    • vscode
    • webpack
    • 常用链接
  • other
  • tool
北鸟南游
2025-09-02
目录

verdaccio搭建npm服务器

主要有 3 种工具来搭建 npm 私服:nexus、verdaccio 以及 cnpm;下面主要介绍 verdaccio 的使用。

# 一、安装、启动

Verdaccio 的安装启动过程较为简单。首先是全局安装 Verdaccio:

npm i -g verdaccio
1

在终端中输入 verdaccio 命令启动 Verdaccio:

demo

终端中输出提示,输出它的配置文件位置、启动的服务地址等信息:

默认 Verdaccio 启动的服务都会在 4873 这个端口,在浏览器中打开这个地址我们就会看到 Verdaccio 搭建的私有库 npm 的界面

# 二、配置修改

在生产环境下,私有 npm 库需要具备以下 3 个功能:

  • 支持对 npm 包的搜索
  • 严格的权限把控,npm包的访问只能是已注册的用户。并且在一些场景下,需要删除用户
  • 发布 npm 包后,推送到钉钉群,告知哪个 npm 包进行了发布

Verdaccio 的配置文件是在 ~/.config/Verdaccio 文件夹的 config.yaml 文件,默认的配置会是这样:

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 }
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

逐个认识一下默认配置中的几个值的含义:

  • storage已发布的包的存储位置,默认存储在~/.config/Verdaccio/文件夹下
  • plugins插件所在的目录
  • web界面相关的配置
  • auth用户相关,例如注册、鉴权插件(默认使用的是htpasswd)
  • uplinks用于提供对外部包的访问,例如访问 npm、cnpm 对应的源
  • packages用于配置发布包、删除包、查看包的权限
  • server私有库服务端相关的配置
  • middlewares中间件相关配置,默认会引入auit中间件,来支持npm audit命令
  • logs 终端输出的信息的配置

# 2.1 开启搜索

当我们私有 npm 库存在很多包的时候,我们想要查找某个包就会有些麻烦。而 Verdaccio 是支持搜索功能的,它是由search控制的,默认为false,所以这里我们需要开启它:

search: true 
1

开启之后,我们就可以在私有 npm 库的页面上的搜索栏进行正常的搜索操作。

# 2.2 权限把控

权限把控指的是我们需要私有 npm 库上发布的包只能团队成员查看,除此之外人员不能看到一切信息。那么,回到 Verdaccio,我们需要做这 2 件事:

  • 限制 npm 包的查看,只能为已注册的用户
  • 禁止用户注册(在团队成员已注册完成后)

相应地,这里我们需要修改配置文件的pacakges和auth。前面我们也提及了packages是用于配置发布包、查看包、删除包相关的权限。我们先再来看看默认的配置:

packages:
  '@*/*':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
1
2
3
4
5
6
7
8
9
10
11

这里的 key 代表对应权限需要匹配的包名,例如对于第一个,如果我们发布的包名是这样的@wjc/test就会命中。每个规则中对应 4 个参数。其中proxy代表如果在私有 npm 库找不到,则会代理到 npmjs(对应unlinks中的npmjs的https://registry.npmjs.org/)。而剩下的 3 个参数,都是用来设置包相关的权限,它有三个可选值$all(所有人)、$anonymous(未注册用户)、$authenticated(注册用户)。那么,下面我们分别看一下这 3 个参数的含义:

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

显然,这里我们需要的是只有用户才能具备上述 3 个权限,即都设置为 $authenticated:

packages:
  '@*/*':
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
  '**':
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs
1
2
3
4
5
6
7
8
9
10
11

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

显然,这是不允许出现的情况,所以这里我们需要设置auth的max_users为-1,它代表的是禁用注册用户:

auth:
    max_users: -1
1
2

开启注册,设置大于0就可以;

# 2.3 发布包推送钉钉群或企微

发布包推送钉钉群,指的是我们每次发布包可以通过钉钉群的机器人来通知我们发布的包的信息。

首先,这里我们需要先有一个钉钉群的机器人对应的 Webhook(获取方式可以查看钉钉的文档)。然后,在 Verdaccio 的配置文件中添加 notify:

notify:
  'dingtalk':
    method: POST
    headers: [{'Content-Type': 'application/json;charset=utf-8'}]
    endpoint: https://oapi.dingtalk.com/robot/send?access_token=****, # 钉钉机器人的 webhook
    content: '{"color":"green","message":"新的包发布了: * {{ name }}*","notify":true,"message_format":"text"}'
1
2
3
4
5
6

其中,method和headers分别表示请求的方法和实体的类型。endpoint表示请求的Webhook地址。content则表示获取发布信息的基础模版,模版中message的值会是钉钉群的机器人发送的消息内容(name表示发布的包名)。

假设,此时我们发布了一个包名为 ming-pro 的私有包,相应地我们会在钉钉群里收到通知:

# 基本使用

# 3.1 注册用户

首先,我们需要注册一个用户:

npm adduser --registry http://localhost:4873/
1


注册成功后,就可以到端口4873登陆。

# 3.2 删除用户

既然有注册用户,不可避免的需求是在一些场景下,我们需要删除某个用户来禁止其登陆私有 npm 库。

前面也提及了 Verdaccio 默认使用的是 htpasswd 来实现鉴权。相应地,注册的用户信息会存储在 ~/.config/verdaccio/htpasswd 文件中:

MacBook-Pro verdaccio % cat htpasswd 
shenshuai:f9TW.3Gxq42Dc:autocreated 2022-05-18T10:04:00.471Z
1
2

这里一条记录对应一个用户,也就是如果这条记录被删除了,那么该用户就不能登陆了,即删除了该用户。

# 3.3 添加、切换源

通过 nrm 来切换源

nrm add shuai http://localhostm:4873/
1

这里的 shuai 代表你这个源的简称,你可以因自己的喜好来命名。

接着,我们可以运行 nrm ls 命令来查看目前存在的源:

默认情况下 npm 使用的源是 https://registry.npmjs.org/,那么这里我们需要将它切换成私有 npm 库对应的源:

nrm use shuai
1

切换好源后,我们之后的 npm i 就会先去私有库查找包,如果不存在则会去 https://registry.npmjs.org/(因为上面配置了 proxy)查找包。

# 3.4 发布

发布的话就直接在某个需要发布包的项目

npm publish
1

在私有 npm 库的界面上就可以看到我们发布的包:

本站部分内容来源网络转载,如有侵权,请联系删除;本站不负任何版权责任!
编辑 (opens new window)
上次更新: 2025/10/22, 08:49:36
rollup
vite

← rollup vite→

最近更新
01
麻将高手快速提升胜率教学
10-22
02
《金刚经》深度解析
10-22
03
鬼谷子识人奇术
10-22
更多文章>
Theme by Vdoing | Copyright © 2018-2025 北鸟南游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式