如何通过 npm 私服解锁新姿势
如何通过 npm 私服解锁新姿势
本文讲解了为什么需要搭建私有注册表,以及注册表的搭建方式选择、搭建步骤、使用。
为需要需要搭建私服?
-
获得更快的依赖安装速度
作为前端 node 现在已经必不可少,但 node 的生态都在 npm 上,可是官方的 npm 注册表地址 https://registry.npmjs.org/ 在国内访问不但很慢,而且可能直接不通。如果是这种情况我们一般通过第三方镜像可以解决问题。但是众所周知,第三方镜像是有一些延迟问题的,出于成本问题,三方基本不会实时或全量同步所有依赖。 -
内部工具或代码
公司内部可能会开发一些工具,这些工具不能公开在公共注册表里。 -
进行依赖测试
当自己在开发一些工具,需要进行小范围测试。这时候一般是不能发布到公共注册表上去的。因为发布上去之后可以导致自己的原型想法泄露、或由于工具没有达到使用标准,这时候别人使用之后可能会带来麻烦。还有一个比较严重的问题会大大占用公共资源。
npm 官方注册表上每个包名都是唯一且独有的,并且发布超过 24 小时之后就不能删除。那这时候你写个 hello world 程序,啥用也没有,却把坑位给占用了,这就很过分。
如何选择私服搭建工具
产生根据自己的需求。像本文面向的是人员应该是前端比较多,所以会选择前端比较熟悉的方式。
常见的私服搭建搭建工具以及方式:
- nexus 可能搭建 npm 之外的其他私服, 通过界面或 xml 进行配置, 看起来对 java 人员比较受用.
- verdaccio 就是一个 node 包, 像前端平常一样 npm i 就能使用.
- cnpmjs 淘宝的 cnpm 就是基于它实现, 搭建它需要安装数据库或 docker.
通过以上简单的比较, 发现 verdaccio 比较适合:
- 熟悉, node.js 技术栈, npm i -g 就能用
- 轻量, 0 配置, 不需要数据库
- 够用, 支持发布私有包, 覆盖公共包
如何安装私服工具
上面我们选择了 verdaccio, 那么我们就来使用它.
这里使用 verdaccio@5.x 进行演示, 要求的 node@12.x
安装
cnpm i -g verdaccio@5
启动
verdaccio
warn --- config file - C:/Users/admin/AppData/Roaming/verdaccio/config.yaml
warn --- Plugin successfully loaded: verdaccio-htpasswd
warn --- Plugin successfully loaded: verdaccio-audit
warn --- http address - http://localhost:4873/ - verdaccio/5.8.0
也可以配置一下上游镜像地址:
uplinks:
npmjs:
url: https://registry.npmmirror.com/
启动成功, 控制能出现一个链接: http://localhost:4873/ , 这个就是私有镜像地址.
下面我们来使用这个镜像随便安装一个好用的接口模拟工具 mockm 试试看:
尝试使用私有镜像
npm i -g mockm --registry=http://localhost:4873/
可以发现在安装的过程中,左边的控制台是镜像的日志. 通过日志我们知道, 安装时是先去官方注册表上去下载的.
这个没毛病, 可以理解. 我们下什么给我们存什么, 这样就避免磁盘空间被占满了, 很好.
后面我们再下的时候, 就直接从我们自己的服务器上返回给我们了.
看看安装之后的效果
看起来是安装成功了, 没毛病. 正在我们来看看安装成果:
# 启动刚刚安装的 mockm
mockm
没有问题, 一切都很完美.
扩展: 转发私服
在公司里面, 一些情况下可能 verdaccio 启动的服务是有防火墙禁止的.
如果要新开端口, 可能需要走很麻烦的审批流程.
为了避免这种这个流程, 我们可以把 verdaccio 服务嫁接在已有的服务上.
我这边已有的服务是 http://127.0.0.1:9000/
, 是通过 mockm 启动的:
我们要实现访问 http://127.0.0.1:9000/ivp/npm
时访问我们的 verdaccio 服务. 只需添加如下配置即可:
{
"/ivp/npm": "http://127.0.0.1:4873"
}
有个地方需要注意, 由于我们这里是代理到子目录下, 但 verdaccio 的前端静态文件是相对于根服务的.
设置环境变量 VERDACCIO_PUBLIC_URL 启动即可:
VERDACCIO_PUBLIC_URL=http://127.0.0.1:9000/ivp/npm/ verdaccio --listen 0.0.0.0:4873
当然, 我们也可以顺手加上进程守护:
VERDACCIO_PUBLIC_URL=http://127.0.0.1:9000/ivp/npm/ pm2 start verdaccio -- --listen 0.0.0.0:4873
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步