最近在开发一个脚手架工具,但是在开发调试阶段不能发布到 npm
官方仓库上,而且后期也只希望在部门内部使用,因此就有了搭建 npm 私服的需求。虽然 npm 官方提供收费的私有仓库,考虑到现在项目需求,使用 verdaccio
不仅免费而且还简单好用。
1. 如何安装
使用下面的命令全局安装:
# 使用 npm
$ npm i verdaccio -g
# 使用 yarn
$ yarn global add verdaccio
安装完成之后运行:
$ verdaccio
info --- Creating default config file in /root/.config/verdaccio/config.yaml
warn --- config file - /root/.config/verdaccio/config.yaml
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://localhost:4873/ - verdaccio/5.1.6
可以看到这边做了两件事:
- 初始化了一份配置文件;
- 然后在
4873
端口起了一个服务,通过这个地址可以访问 web 页面,查看里面发布了哪些包;
这里有个问题,现在这个进程在前台运行,如果我们关掉 shell 窗口,这个进程就退出了。因此我们需要安装一下 pm2
进程守护,让 verdaccio
在后台运行。
$ yarn global add pm2
然后执行命令:
$ pm2 start verdaccio
此时进程就在后台运行了,我们可以通过下面的命令查看一下监听 4873
端口的进程:
$ lsof -i :4873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Verdaccio 625330 root 20u IPv4 10623850 0t0 TCP *:4873 (LISTEN)
当我们需要退出这个进程的时候,只需要执行下面的命令:
$ pm2 stop verdaccio
然后需要改下配置文件,重点改两个地方:
# 添加淘宝镜像
uplinks:
npmjs:
url: https://registry.npmjs.org/
taobao:
url: https://registry.npm.taobao.org/
packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated
#代理 表示没有的仓库会去这个npmjs 里面去找 ,
# taobao 又指向 https://registry.npmjs.org/ ,就是上面的 uplinks 配置
proxy: taobao
'**':
# 三种身份,所有人,匿名用户,认证(登陆)用户
# "$all", "$anonymous", "$authenticated"
#是否可访问所需要的权限
access: $all
#发布package 的权限
publish: $authenticated
# 如果package 不存在,就向代理的上游服务发起请求
proxy: taobao
# 监听的端口 ,重点, 不配置这个,只能本机能访问
listen: 0.0.0.0:4873
我们可以通过下面的地址远程访问 web 页面,如果你用的是阿里云服务器,记得在安全组中允许 4873
端口访问:
http://<服务器公网IP>:4873/#/
2. 发布一个包
我们先将 npm 源设为刚才创建的服务地址:
$ npm config set registry http://localhost:4873
如果不希望修改全局的 npm 镜像源,而是只针对某个项目使用私有的 npm 仓库,也可以在项目根目录下添加 .npmrc
文件,内容如下:
registry=http://localhost:4873
发布之前我们需要先创建账号并登录。默认情况下 verdaccio
允许任何人创建账号,执行命令:
$ npm adduser
按照提示输入用户名、密码、邮箱等信息,完成之后会自动登录,用下面命令查看当前登录用户:
$ npm who am i
如果已经注册过账号,直接登录即可:
$ npm login
最后在 package.json
中设置好版本,然后发布:
$ npm publish
参考
verdaccio 官方文档
使用verdaccio 搭建私有npm 服务器
npm私服搭建—verdaccio方案及其最佳实践