如何通过 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

安装

12
cnpm i -g verdaccio@5

2022-03-18-16-50-14

启动

12345
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

2022-03-18-16-53-18

启动成功, 控制能出现一个链接: http://localhost:4873/ , 这个就是私有镜像地址.

下面我们来使用这个镜像随便安装一个好用的接口模拟工具 mockm 试试看:

尝试使用私有镜像

1
npm i -g mockm --registry=http://localhost:4873/

2022-03-18-16-56-04

可以发现在安装的过程中,左边的控制台是镜像的日志. 通过日志我们知道, 安装时是先去官方注册表上去下载的.

这个没毛病, 可以理解. 我们下什么给我们存什么, 这样就避免磁盘空间被占满了, 很好.

后面我们再下的时候, 就直接从我们自己的服务器上返回给我们了.

看看安装之后的效果

看起来是安装成功了, 没毛病. 正在我们来看看安装成果:

12
# 启动刚刚安装的 mockm mockm

2022-03-18-17-03-33

没有问题, 一切都很完美.

扩展: 转发私服

在公司里面, 一些情况下可能 verdaccio 启动的服务是有防火墙禁止的.

如果要新开端口, 可能需要走很麻烦的审批流程.

为了避免这种这个流程, 我们可以把 verdaccio 服务嫁接在已有的服务上.

我这边已有的服务是 http://127.0.0.1:9000/, 是通过 mockm 启动的:

我们要实现访问 http://127.0.0.1:9000/ivp/npm 时访问我们的 verdaccio 服务. 只需添加如下配置即可:

123
{ "/ivp/npm": "http://127.0.0.0:4873" }

2022-03-18-17-57-56

有个地方需要注意, 由于我们这里是代理到子目录下, 但 verdaccio 的前端静态文件是相对于根服务的.

设置环境变量 VERDACCIO_PUBLIC_URL 启动即可:

1
VERDACCIO_PUBLIC_URL=http://127.0.0.1:9000/ivp/npm/ verdaccio --listen 0.0.0.0:4873

当然, 我们也可以顺手加上进程守护:

1
VERDACCIO_PUBLIC_URL=http://127.0.0.1:9000/ivp/npm/ pm2 start verdaccio -- --listen 0.0.0.0:4873

2022-03-18-18-03-23

程序员自动生成工作报告!为 gitday 新添加一个 debug 功能
在安卓上安装 linux 系统
评论
wll8wll8前端
文章29
分类5
标签5