使用 Verdaccio 搭建私有 npm 服务器
为什么要搭建 npm 服务器
- 比如公司或者个人开发的一些可复用的模块、CLI 等, 为了方便统一管理、开发和使用。
- 开发的这些模块、CLI 并不希望其他人看到等原因
安装与使用
先自行安装好 node、pm2
node 用于安装 verdaccio,pm2 用于启用 verdaccio
node 安装后,一定要确定 node 的安装路径,后面有用
安装 verdaccio 至全局
npm i -g verdaccio
安装好后确定下 verdaccio 路径,verdaccio 路径规则为 node 路径/bin/verdaccio
比如我这里的 nodejs 路径为 /www/server/nodejs/v12.16.3/,那 verdaccio 路径就是 /www/server/nodejs/v12.16.3/bin/verdaccio
第一次启动 verdaccio,通过 verdaccio 路径启动,会生成 verdaccio/config.yaml 文件,可以在日志内看到
/www/server/nodejs/v12.16.3/bin/verdaccio
- 建议通过软连接的方式启动,类似于映射
# ln -s [verdaccio 路径] /usr/local/bin/
ln -s /www/server/nodejs/v12.16.3/bin/verdaccio /usr/local/bin/
# 软连接后启动方式:
verdaccio
打印的日志:
warn --- config file - /root/.config/verdaccio/config.yaml
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
(node:19294) [LRU_CACHE_OPTION_maxAge] DeprecationWarning: The maxAge option is deprecated. Please use options.ttl instead.
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://0.0.0.0:4873/ - verdaccio/5.10.1
由日志可知 config.yaml 在 /root/.config/verdaccio/ 下
http://0.0.0.0:4873/ 是默认访问地址跟端口,0.0.0.0 是默认访问地址,指向你,4873 是 verdaccio 的默认端口
- 在服务器中,0.0.0.0 指的是本机上的所有 IPV4 地址,如果一个主机有两个 IP 地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是 0.0.0.0,那么通过两个 ip 地址都能够访问该服务。
- 在路由中,0.0.0.0 表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。
服务器环境记得开放该端口的安全组
打开 config.yaml,并在文件最后写上 listen: 0.0.0.0:4873,这里的端口可以改成你想要的端口号,记得开发端口相关安全组
listen: 0.0.0.0:4873
- 访问 verdaccio,本地可以通过 localhost:4873,服务器通过 【当前服务器 IP】:4873 访问

- 使用 PM2 启动 verdaccio 服务,更多 PM2 命令自行百度
pm2 start /www/server/nodejs/v12.16.3/bin/verdaccio
# 软连接后启动方式:
pm2 start verdaccio
npm 包发布
- 先在本地创建 npm 包
# 生成基础文件
npm init
# 创建一个demo.js
# demo.js
module.exports = () => {
console.log("这是一个DEMO");
};
- 本地登录/注册,会让你输入账户/密码/邮箱,账户名要小写
npm adduser --registry [verdaccio 服务访问地址]
# 提示以下内容,说明登录成功
Logged in as [账户名] on [verdaccio 服务访问地址].
# 登录成功后,发布 npm 包
npm publish --registry [verdaccio 服务访问地址]
# 发布后在 [verdaccio 服务访问地址] 刷新就能看到 publish 上来 npm 包
- F5 刷新 【verdaccio】 就可以看到刚刚发布的 test 包

- 切换源,npm install,建议通过 nrm 进行源管理nrm 的安装与使用
npm install test
npm 包删除
- 登录到服务器,执行 verdaccio(已配置了软连接),查看 config 地址
verdaccio
# 日志
warn --- config file - /root/.config/verdaccio/config.yaml
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
(node:19294) [LRU_CACHE_OPTION_maxAge] DeprecationWarning: The maxAge option is deprecated. Please use options.ttl instead.
(node:19294) Warning: Verdaccio doesn't need superuser privileges. don't run it under root
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://0.0.0.0:4873/ - verdaccio/5.10.1
# verdaccio npm 包地址规则:[verdaccio config地址]/storage
# 由上面的日志可知, verdaccio npm 包地址为 /root/.config/verdaccio/storage
cd /root/.config/verdaccio/storage
ls
rm -rf [要删除的包]
# 删除后 F5 刷新 verdaccio 页面
禁用注册
修改 verdaccio 的【config.yaml】文件的 max_users 值为-1
# config.yaml
auth:
htpasswd:
# 存储了加密认证信息的 htpasswd 文件
file: ./htpasswd
# 允许注册的用户最大数量, 默认值是 "+inf",即不限制
# 可以将此值设置为-1 以禁用新用户注册。
max_users: -1
- 更改 package 权限,只有注册用户可访问、发布包
# config.yaml
packages:
'@*/*':
# 默认为 $all 所有人,改成 $authenticated 已注册的用户
access: $authenticated
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
'**':
# 默认为 $all 所有人,改成 $authenticated 已注册的用户
access: $authenticated
- 修改 config.yaml 后,记得重启【verdaccio】服务
Powered by Waline v2.15.8