基于Verdaccio搭建npm私有服务器,你学废了吗?

370 阅读4分钟

愿你乘着和煦的春风,朝着灿烂的前景,马不停蹄、奔腾捷进!*
愿我们透过那爱湖的波光水雾,一起憧憬美好的未来*

今天来聊聊npm私服搭建~

不知道你是否有这样的痛点: 一个开发团队,每个人负责各自的项目,公司业务越来越复杂,项目迭代越来越快,大家开始不停的造轮子(通用代码),然而却难以避免专属轮子,复制轮子的情况出现,导致代码质量下降,不易维护,项目难以交接,性能也明显下降.....很多问题随之而出现
今天不讲将如何培养大家的代码习惯,只说一说如何把专属轮子变成通用轮子.

首先我认为,不管轮子造的好不好,一个知道造轮子的人,说明他对代码是有一定想法的,他知道组件化开发,也知道需要提高代码质量,欠缺的只是引导和时间研究

什么是通用轮子?其实就是代码共享,它的复用性很强,每个项目都可用,避免重复开发,提高开发效率,节约时间成本,保证快速交付

这种情况下,我们就需要一个仓库来承载这些通用的轮子,在有需要的时候就获取这些轮子进行造车,一般情况像这种属于公司的代码是不对外开放的,所以我们仓库也需要进行内部部署,像npmjs这类开放的仓库就不是很适用我们,所以我今天介绍的就是如何verdaccio来搭建我们的私有仓库.

1. npm的工作原理

  • 我们会将共享的代码发布到私有npm仓库,让npm帮助我们管理项目中的依赖关系;
  • 当我们需要使用发布的模块时,会通过npm install去安装,安装过程会先检查本地的node_modules目录中是否已经存在这个模块;
  • 如果没有便会向私有的npm发起请求,服务器会先查询所请求的这个模块是否是我们私有的模块或已经缓存过的公共模块;
  • 如果是则直接返回给用户,如果不是的话,那么则会继续向上查找(也就是开源的npm仓库)去查找该模块并返回给用户.

verdaccio官网:https://verdaccio.org/

Verdaccio 是一个 Node.js创建的轻量的私有npm proxy registry

Verdaccio概述摘要
* 它是基于Node.js的网页应用程序
* 它是私有npm registry
* 它是本地网络proxy
* 它是可插入式应用程序
* 它相当容易安装和使用
* 我们提供DockerKubernetes支持
* 它与yarn, npm 和pnpm 100% 兼容
* 它forked于sinopia@1.4.0并且100% 向后兼容

2. npm搭建过程

2.1 安装verdaccio

npm install -g verdaccio --unsafe-perm

2.2 安装pm2 守护verdaccio进程

该步骤非必须

npm install -g pm2 --unsafe-perm

2.3 启动verdaccio

服务端要一直保持运行的状态,否则客户端无法下载

verdaccio

1.png

启动后也可通过浏览器中运行 http://localhost:4873 就可以看到所有发布的npm 包

3.png

安装pm2可以这么启动

pm2 start verdaccio
pm2 show verdaccio 查看进程

2.4 修改配置文件

安装后的文件在:C:\Users\(用户名)\AppData\Roaming\verdaccio2.png

附上我的配置:

# 所有包的缓存目录
storage: G:/appTools/verdaccioStorage

# 插件目录
plugins: ./plugins

# 开启web 服务,能够通过web 访问
web:
  title: '私有npm'

# 验证信息
auth:
  htpasswd:
    # 用户信息存储目录
    file: ./htpasswd
    # Maximum amount of users allowed to register, defaults to "+inf".
    # You can set this to -1 to disable registration.
    # max_users: 1000

# 公有仓库配置 文件不存的时候去上游服务器获取代码
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

# packages表示哪一类用户可以对匹配的项目进行安装 【$all 表示所有人都可以执行对应的操作,$authenticated 表示只有通过验证的人可以执行对应操作,$anonymous 表示只有匿名者可以进行对应操作(通常无用)】
packages:
  '@*/*':
    # scoped packages
    access: $all
    publish: $authenticated
    unpublish: $authenticated

    # 代理 表示没有的仓库会去这个npmjs 里面去找 ,
    # npmjs 又指向  https://registry.npmjs.org/ ,就是上面的 uplinks 配置
    proxy: npmjs

  '**':
    # and three keywords: "$all", "$anonymous", "$authenticated"
    # 是否可访问所需要的权限
    access: $all

    # allow all known users to publish/publish packages
    # (anyone can register by default, remember?)
    # 发布package 的权限
    publish: $authenticated
    unpublish: $authenticated

    # 如果一个npm包不存在,它会去询问设置的代理
    proxy: npmjs

server:
  keepAliveTimeout: 60

middlewares:
  audit:
    enabled: true

# log settings
logs:
  - { type: stdout, format: pretty, level: http }
  #- {type: file, path: verdaccio.log, level: info}

# 监听的端口 ,重点, 不配置这个,只能本机能访问
listen: 0.0.0.0:4873

2.5 添加用户

npm adduser --registry http://192.168.1.XX:4873  //后面是我们的私服地址
npm login 客户端登录

2.6 发布包

npm publish // 服务端发布
npm publish --registry http://192.168.1.XX:4873 //在客户端的情况下,直接加后缀发布到私服

3. 客户端使用

  • 建议客户端安装nrm
npm install -g nrm
  • 添加服务器npm 仓库源到地址到nrm(为了方便,给自己服务器到地址取了一个别名mynpm,为了使用和切换更方便)
nrm add mynpm http://192.168.1.xx:4873
  • 查看所有镜像源地址
nrm ls
  • 切换下载源
nrm use mynpm
  • 如果需要安装发布的包时,此时只需执行一下命令即可
npm i xxx

以上就是通过Verdaccio来搭建私服,以及代码发布及使用~