当前位置: 首页 > 后端技术 > Node.js

verdaccio-快速搭建私有npmregistry的利器

时间:2023-04-03 23:46:59 Node.js

上一篇写的更多是记录使用过程中的坑。关于具体的构建方法,参考文章中已经写的很详细,本文不再赘述。什么是verdaccio?什么是verdaccio?这是官方网站,权威全面。Verdaccio是为Node.js创建的轻量级私有npm代理注册表,它从sinopia@1.4.0派生而来,并且100%向后兼容。Verdaccio意为中世纪晚期意大利壁画中流行的绿色。Sinopia是当初搭建私有npm的选择,但是已经很多年没有维护了,而verdaccio是从sinopia衍生出来的,一直在维护,所以现在看来??verdaccio是更好的选择。如何使用verdaccio搭建私有npmregistry搭建教程搭建教程2关于搭建方法,上面两篇文章已经写的很清楚了,这里只是简单记录一下大概的过程,方便以后快速参考:npminstall-gverdaccio#当前版本是3.8.6verdaccio#第一次执行会打印出配置文件config.yaml的位置修改config.yaml文件,添加listen的内容:0.0.0.0:4873,方便其他人访问你的私有NPM通过IP:PORT再次启动verdaccio,让新的配置文件生效,一个私有NPM就建好了,是不是快了?如何将包发布到私有NPM?npmconfigsetregistry=http://IP:PORT/#配置文件中的listen字段npmlogin#在config.yaml的默认配置中,只有登录用户才能执行publish操作npmpublish#到包在你需要发布的包的.json文件的同级目录下执行npmlogin和npmadduser命令是等效的。如果是第一次登录,并且用户名没有冲突,那么登录信息会被加密存储在config.yaml文件同级的htpasswd文件中。如何设置特定用户有发布权限?如上所述,用户需要先登录才能执行发布操作。此默认规则可用于与配置文件中的max_users一起实现目标。htpasswd文件中的每一行都会记录一个登录用户的信息。当我们设置max_users为1时,如果其他用户使用npmlogin命令无法登录成功,就会报错:npmERR!代码E403npm错误!Registryreturned403forPUTonhttp://0.0.0.0:4873/-/user/org.couchdb.user:msa:maximumamountofusersreached这样只有第一个登录的用户才能进行publish操作。相当于限制发布权限,只能被一个用户占用。而且这个用户可以同时在多台机器上登录,也就是说你和你的同事可以使用这个账号在同一时间/不同机器上进行发布操作。如何保证你的私有包不会发布到外部仓库?使用package.json文件的配置项,我们有两种方式:set"private":true,这个设置可以保证包不会被发布,但是如果这样做了,也不能发布到外部仓库,也不能发布到你指定的仓库。设置publishConfig,这个设置可以指定发布路径,当你使用npmpublish命令发布时,这个字段的配置项会覆盖你本地设置的registry地址,强制你的包发布到你指定的私有存储中去."publishConfig":{"registry":"http://IP:4873/"},是否可以手动修改私有npm包的内容?无实际案例:有一次,为了快速验证一个bug,不想再次上传,手动修改了私有npm仓库中package中的文件内容。结果其他同事通过npminstall安装包的时候报错,说是来自shasum的值不相等,无法安装。原理分析:在config.yaml文件的storage字段中配置了私有npm仓库中所有包的实际存放路径,在此路径下可以看到所有私有包,并将这些包制作成.tgz压缩包,而这些同级目录下的package.json文件记录了这些包的所有信息,包括名称、版本号、上传时间等,还有一个shasum字段,记录了一个包在上传时生成的计算序列号从里面的文件内容来看,如果手动修改了文件内容,但是没有修改对应的shasum字段内容,会导致不匹配的错误,安装失败。我认为出于安全原因,这也应该是npm的一种手段。使用pm2工具运行verdacciopm2是一个nodejs进程管理工具,内置了负载均衡功能,非常好用,功能强大。但是在windows上直接执行pm2startverdaccio是无法成功运行verdaccio的。应该是执行脚本无法正常运行。分析的问题,之前有人提过verdaccio的issues,不过现在好像还没有定论。使用nrm快速切换本机使用的npm仓库地址。nrm是一个npm注册中心管理工具,可以帮助我们快速切换本地npm仓库地址。我们可以使用nrmaddlocalhttp://ip:port为我们本地的private仓库添加一个别名,然后就可以使用nrmuselocal快速切换了,不用再记录IP和端口了。参考文章什么是verdaccio?使用verdaccio搭建npm私有仓库NodeJS学习:搭建私有npm