需求背景

平时在项目工作中可能会用到很多通用性的代码,比如,框架类、工具类以及公用的业务逻辑代码等,通过打包发布到npm中央仓库或者私有仓库,来进行维护和托管代码,方便公用代码的使用。如果涉及到不方便公开的代码组件可以发布到私有仓库。
私有 npm 组件库的优势:

  1. 私有 npm 包只对公司内部局域网开放
  2. 速度比直接在 npm 下载包更快,也比使用淘宝镜像快。
  3. 对于发布和下载 npm 包可以配置权限管理

Verdaccio安装与部署

Verdaccio 是一个轻量级的npm包管理工具,其特点是可以托管私有模块,并且带有缓存功能,当私有仓库中找不到对应模块的时候,会去npm公服上面下载,并缓存起来。

Verdaccio 依赖 nodejs 和 npm 环境,准备材料如下:

  1. nodejs
  2. npm
  3. verdaccio
  4. 一台服务器

1. 在服务器中安装 nodejs 与 npm(Linux 为例)

PS:在官网下载linux系统的安装包上传到服务器进行解压安装也可以

  1. # 下载
  2. wget https://nodejs.org/dist/latest/node-v16.4.0-linux-x64.tar.xz
  3. # 解压
  4. tar xf node-v16.4.0-linux-x64.tar.xz
  5. # 进入解压目录
  6. cd node-v16.4.0-linux-x64
  7. # 执行node命令 查看版本
  8. ./bin/node -v
  9. # 创建 nodejs 和 npm 的软连接
  10. ln -s /usr/local/node-v16.4.0-linux-x64/bin/npm /usr/local/bin/
  11. ln -s /usr/local/node-v16.4.0-linux-x64/bin/node /usr/local/bin/
  12. # 检查是否配置好
  13. node -v
  14. npm -v

2. 全局安装 verdaccio

  1. # 全局安装verdaccio
  2. npm i -g verdaccio

3. 配置私有库文件

  1. # 先新建私有库目录
  2. mkdir apu-npm
  3. # 进入目录
  4. cd apu-npm
  5. # 运行verdaccio
  6. verdaccio

执行结果如下:

Verdaccio doesn’t need superuser privileges. Don’t run it under root. warn —- config file - /root/.config/verdaccio/config.yaml warn —- Plugin successfully loaded: htpasswd warn —- Plugin successfully loaded: audit warn —- http address - http://localhost:4873/ - verdaccio/3.10.2

从控制台的输出可以看到,verdaccio的配置文件路径在/root/.config/verdaccio/config.yaml,默认访问地址http://localhost:4873/

修改verdaccio的配置文件

  1. # 已发布的包的存储位置
  2. storage: ./storage
  3. # 插件所在的目录
  4. plugins: ./plugins
  5. # 界面相关的配置
  6. web:
  7. # WebUI是默认启用的,如果您想禁用它,只需取消这一行的注释
  8. # enable: false
  9. title: xx-私有库
  10. # 用户相关,例如注册、鉴权插件(默认使用的是 htpasswd)
  11. auth:
  12. htpasswd:
  13. # 账户与密码存放地址
  14. file: ./htpasswd
  15. # 允许注册的最大用户数量,默认为 "+inf".
  16. # 您可以将此值设置为-1以禁用注册
  17. max_users: 100
  18. listen:
  19. - 0.0.0.0:4873
  20. # 用于提供对外部包的访问,例如访问 npm、cnpm 对应的源
  21. uplinks:
  22. npmjs:
  23. url: https://registry.npmjs.org/
  24. # 用于配置发布包、删除包、查看包的权限
  25. # 3个关键字: "$all"-所有人, "$anonymous"-未注册用户, "$authenticated"-注册用户
  26. packages:
  27. # 范围包(例如对于第一个,如果我们发布的包名是这样的 @jex/test 就会命中)
  28. '@*/*':
  29. # 控制包的访问权限
  30. access: $all
  31. # 控制包的发布权限
  32. publish: $authenticated
  33. # 控制包的删除权限
  34. unpublish: $authenticated
  35. # 如果本地没有可用的私有包,代理会请求'npmjs'仓库
  36. proxy: npmjs
  37. '*':
  38. access: $all
  39. publish: $authenticated
  40. unpublish: $authenticated
  41. proxy: npmjs
  42. # 私有库服务端相关的配置
  43. server:
  44. keepAliveTimeout: 60
  45. # 中间件相关配置,默认会引入 auit 中间件,来支持 npm audit 命令
  46. middlewares:
  47. audit:
  48. enabled: true
  49. # 终端输出的信息的配置
  50. logs:
  51. - {type: stdout, format: pretty, level: http}
  52. # 发布包推送钉钉群
  53. notify:
  54. 'dingtalk':
  55. method: POST
  56. headers: [{'Content-Type': 'application/json;charset=utf-8'}]
  57. # 钉钉机器人的 webhook
  58. endpoint: https://oapi.dingtalk.com/robot/send?access_token=****,
  59. # 推送内容
  60. content: '{"color":"green","message":"新的包发布了: *{{ name }}*","notify":true,"message_format":"text"}'

4. 服务启动

  1. 远程登录/远程控制进入阿里云服务器
  2. 在终端窗口中执行命令 verdaccio —config ./config.yaml

5. pm2 管理 verdaccio 进程

使用pm2启动verdaccio,保证该进程一直处于打开状态

安装pm2

  1. npm install -g pm2

使用pm2启动verdaccio,以保证进程一直处于打开状态

  1. pm2 start verdaccio


客户端发布npm包到私有库

1. 用户注册

  1. # 添加用户(确保配置文件开启了允许注册)
  2. # 依次按照窗口填写username、password、e-mail 回车提交数据即可
  3. npm adduser --registry http://服务器ip:4873

2. 用户登录

  1. # 注册后,自动默认登录,登陆后npm会自动缓存,下次无需再次登录
  2. npm login --registry http://服务器ip:4873

3. 如何使用私有仓库npm包

  1. # 将 npm 访问源设置为私库访问源
  2. npm config set registry http://服务器ip:4873
  3. # 查看本机npm访问源
  4. npm config get registry

4. 发布npm包到私有仓库

  1. # 设置了registry为私库访问源可省略--registry参数
  2. npm publish --registry http://服务器ip:4873

包GUI管理窗口

浏览器打开: http://服务器ip:4873,可以查看私库的npm包
image.png