在工作中,我们常常会开发很多通用性代码,比如我们用过的UI库、工具类、公用业务逻辑代码等。这时可将这些库发布到npm,需要的项目安装使用即可,但是发布到公网npm无法保证源码的私密性,这时我们就需要使用到私有npm仓库。
私有npm仓库优势:
- 只能在公司局域网使用,保证了代码的私密性
- 因为使用局域网,依赖包下载更快
- 可以将发布和安装npm的包进行权限配置,利于npm仓库的维护
- 修改了第三方npm包,但是发布包的作者未将PR合并到master,导致该功能无法在安装包后引用,这时我们可以将三方包源码修改,发布于私有仓库,即可下载安装,而不用在 node_modules 中更改源码
使用 Verdaccio
Verdaccio 是用 nodejs
开发的轻量级私有npm代理服务,因此使用 Verdaccio 前需要安装 node。如何安装node不是我们这篇文章的重点,可自行搜索资料安装node。
安装 Verdaccio
使用 npm 安装 Verdaccio ,需要全局安装,所以注意权限问题。
npm install -g verdaccio
安装完以后,执行
verdaccio -h
出现版本号相关提示则表示安装成功。如果提示命令找不到,请重启控制台。
运行 verdaccio
运行 verdaccio 命令很简单,执行verdaccio即可。
verdaccio
这时,执行结果如下所示
这是提示我们,verdaccio 的配置文件放在了用户目录下的 .config/verdaccio/config.yaml
中,编辑该文件即可修改对于 verdaccio 的配置。相关配置我们在后一段落介绍。打开浏览器,输入 localhost:4873,就能看到用于展示包的网页,因为我们目前还没有上传任何包,所以该页面为空,并且提示发布包到该仓库。
配置 verdaccio
verdaccio 的配置文件为 ~/.config/verdaccio/config.yaml
,使用编辑器或者 vim
打开该文件。
以下介绍重要参数的含义
storage
配置发布到私有仓库包的存放地址,默认存放于 ~/.config/verdaccio/storage
中,我们可以定期将该文件中的内容进行清理,但是一定要谨慎,因为该文件夹中存放的包不止我们自己发布的,还有一些从公有仓库中拉取并缓存的包(具体如何配置拉取缓存,后续参数介绍)。
uplinks
也许,我们的包不止发布到了一个仓库,如果公司按照业务线划分了几个前端部门,部门之间技术独立但能共享,这时如果我们想在使用自己发布的npm私有包的同时,还期望可以使用其他团队开发的npm包,这时我们就可以通过指定该参数实现。换句话说,npm公有仓库也能理解为我们的另一个仓库,像这样的仓库还有淘宝的仓库等。配置如下,在这里其实只是做一个定义,真正的使用其实是在包 packages
管理的参数中
uplinks:
npmjs:
url: https://registry.npmjs.org
taobao:
url: https://registry.npm.taobao.org/
packages
该参数是整个配置中最为重要的一个,因为通过配置该参数,能达到设定包权限,设定包发布与使用的权限,设置包是否代理到公有npm仓库等
packages:
'@feiye/*':
access: $all
publish: $authenticated
unpublish: $authenticated
'**':
access: $all
publish: $authenticated
unpublish: $authenticated
# if package is not available locally, proxy requests to 'npmjs' registry
proxy: npmjs
通过以上参数的配置,我们就约定了,如果你发布的包是 @feiye
前缀的,那就表明是私有包,不会代理到外部。如果发布的包没有 @feiye
前缀,则会走 **
的逻辑,即所有不包含 @feiye
前缀的包,不难看出,proxy: npmjs
指明了如果该包上传则会被代理到npm公有仓库,如果在下载某个不包含 @feiye
前缀的包时,会自动代理到npm公有仓库查找资源并下载,并且默认会将拉取的资源缓存到我们前面指定的 storage
文件夹中。
listen
相信开发过后端的同学都不会陌生,服务启动在什么端口,verdaccio默认监听在4873端,我们可以通过指定 listen
参数修改配置
listen:
0.0.0.0: 3000
设置完重启 verdaccio,端口便监听在了3000
到这里npm私有仓库的配置启动就完成了,接下来我们就可以开发包并发布了,但在这之前,推荐大家一个管理npm源的工具,nrm
。
设置npm源
使用 npm 安装 nrm
npm install -g nrm
列出当前 nrm 存储的npm源
nrm ls
结果如下
使用指定源
比如我们现在想使用npm官方源
nrm use feiye
结果如下
添加用户自定义的源
添加命令很简单,只需要指定源名和源地址即可
nrm add feiye http://zhaiyj.itodouble.top/
再运行查看命令就能发现,列表中多了一条记录,正是我们添加的源
登录npm
注意,登录前一定要保证此时的npm源是指向我们私有仓库的,使用nrm即可完成切换
nrm use feiye
添加用户
如果是第一次登录,则需要注册用户,如果服务未做特殊权限的设置,直接添加用户即可,命令如下
npm addUser
跟随提示填写用户名、密码、邮箱即可
发布包
先切换到要发包的目录中,执行以下命令
npm publish
使用pm2启动verdaccio