序言
使用verdaccio自建npm proxy registry是为了解决工作中面临的两个问题。
缺少私有registry来存储包
最近我需要将一些包上传到registry,因为这会减少我迭代时的工作量。可问题在于,涉及到 商业机密 的包是不适合上传到npm这种公共仓库的。例如我正在编写的_生成浏览器指纹_的包,因为它一旦被公开就会失去大部分价值。又例如被应用在前端脚手架内的包,因为它们都是为公司业务逻辑量身打造的。
其他registry不够稳定
在日常工作中有些包总是下载缓慢甚至时常下载失败,即使切换到国内镜像源也是如此。我们除了一遍遍尝试重新安装之外别无他法,若是引起打包过程失败则更是会浪费大量时间。
verdaccio工作逻辑
在了解怎么使用它之前是绝对有必要了解这个工具的逻辑的。或许我们更熟悉的是cnpm,它是将国外npm服务器上所有公开的包缓存一份在自己服务器上。而verdaccio则不同,我们从verdaccio下载包的时候,它会先从我们自己的数据库中查找有没有匹配的包,如果有则从自己服务器下载,如果没有则从上行链路下载,这里的上行链路可以是cnpm也可以是npm或者任意一个registry。这就是proxy registry的含义。
如何使用
下载包
verdaccio是完全兼容yarn和npm的,因此只需要将registry设置成verdaccio即可。不建议将verdaccio设置到全局,推荐下述方式。
在项目根目录下创建名为.npmrc
的文件,文件内容如下:
@bhkk:registry=https://xxx.xxxxx.com/
接下来就可以用yarn或者npm来装包了。
上传包
首先登陆verdaccio,在控制台执行下述指令:
#用户名,密码和npm一致即可,邮箱任意。
npm adduser --registry https://xxx.xxxxx.com/
接着就可以使用下述指令上传包了。
npm publish --registry https://xxx.xxxxx.com/
为什么不
为什么不使用gitlab?
gitlab只能通过分支来区分版本,而切换分支显然远远不如yarn add xx@^xx.xx
方便。
安装包的过程也十分繁琐。要想安装某个包,就必须先去拿到这个包的仓库地址,然后输入指令clone它,最后还要自己区分最新版本的分支并切换过去。而我认为不应该把精力浪费在这些地方。
为什么不使用cnpm?
阿里的cnpm并不符合我的需求。我们需要的并不是自己维护一个