一般下载npm包都是从npm官方源地址下载的,发布的也是发布到npm官方的源地址。有时候可能会存在这样的需求: 公司内开发的UI库、工具类、公用业务逻辑代码等想打包成npm包,但是又不想开源,只想自己公司内部使用。这时候就需要搭建一个npm私服,本文分享一个通过verdaccio如何搭建一个npm私服。
优势
先说说npm私服的优势:
- 私有的npm包: 只有内部人员可以访问,保证源码私密性。
- 包缓存: 除开第一次下载,之后的每次下载都是缓存,不用从npm源下载数据。
使用
为了能够让阅读者能实际上手体验整个搭建过程,我就在本地环境中演示搭建一个Verdaccion。如果是公司内部使用,只需要在服务器上装好node环境。后面操作都是差不多的。
安装
npm install -g verdaccio
可以使用 verdaccio -v 查看是否安装成功。
启动服务
直接输入 verdaccio 即可开启Verdaccio服务。
会打印这些内容:
第一行是配置文件地址,一个 config.yaml 文件。
最后一行是启动的web页面:
配置源
源地址也就是npm下载的地址。现在需要改变原有的npm源地址,因为需要经过本地的verdaccio服务。当verdaccio在本地没有找到你想要的包的时候(一般出现在第一次下载),就会在配置文件中去找uplinks配置的其它源地址,从这些源地址中下载。
uplinks:
npmjs:
url: https://registry.npmjs.org/
taobao:
url: https://registry.npmmirror.com/
默认有一个npm的官方源地址,但是官方地址有时候抽风下不下来,可以自己添加一个淘宝的镜像地址。
修改源地址
nrm use ps 这里用到了 nrm 来管理源地址。为了保证讲述verdaccio的流畅性,对于 nrm的使用我放在最后,可以先去最后面看完再回来继续看。
验证
现在npm下载的源地址已经是本地的verdaccio服务,可以试着安装一个 pnpm i lodash 来看看效果,第一次安装的lodash还是得去配置中的uplinks中的源下载。
下载完成之后,在配置文件 config.yaml 的同级目录storage 文件夹内会多一个loadsh文件,这就是本地缓存的数据。我这里已经下载很多包,初始情况下是只有一个 .verdaccio-db.json 文件。
那么想验证第二次下载是不是不需要从npm官方或者其它三方的源下载了,可以先卸载掉
lodash,然后断掉本机的网络,再重新安装。可以看到依然被安装上了,就证明这个包存在本地缓存中了。
发布npm包到本地私服
首先需要创建一个账号
npm addUser
输入用户名密码邮箱即可。
然后 npm login 登录当前账号
执行 npm publish 即可。如果发布失败可以重试一次。
发布成功后可以在verdaccio的本地服务网站看到刚刚的包。首先要登录网站,账号就是通过 npm addUser 创建的账号:
执行 pnpm i test 后就可以在node_modules 中看到刚刚上传到私服中的包了
nrm
更方便的修改npm源地址
安装
npm i -g nrm
列举当前的nrm源
nrm ls
切换源
nrm use taobao
新增源
由于我们现在使用的是私服,所以任何npm包的下载,发布都必须先走自己的源,所以需要将源切换为本地的服务。
新增: nrm add ps http://localhost:4873/
- ps:给本地的源取个名字
- http://localhost:4873/:启动verdaccio服务的地址