前言

在前端开发中,总会慢慢沉淀一些可复用的组件或工具等。当项目增多,跨项目复用的需求也随之而来。将这种可复用的组件或工具等抽离成一个个 npm 库便是一种好的选择。在公司内部,有时我们并不希望这些对外,那么私有 npm 库便是一种方案。

方案

在自建的私有 npm 库中,主要的方案有 Nexuscnpmverdaccio 等。Nexus 大而全,不仅仅支持 npm,还支持常见语言的的包管理等。cnpm 是阿里开源的一套方案,需要数据库等。而 verdaccio 则是在 sinopia 停止维护后,fork 并更新迭代的一个轻量级的私有 npm 库方案。
在早期,我们团队是使用的 Nexus。因为公司后端在使用,当时便想着直接使用即可。但实际使用过程中,遇到了一些。经过排查是问题,是 Nexus 本身的问题,在后续的迭代版本才会解决。因运维他们不愿升级,只好作罢。后来,选择了 verdaccio 搭建。目前已经使用了一年多,还没有出现问题,非常稳定。
因此,本文将以 verdaccio 来讲讲搭建私有 npm 库。

安装

verdaccio 的安装十分简单,使用 npm 或 yarn 安装均可。同时,我们将使用 pm2 来做进程管理。

  1. npm i -g verdaccio pm2

使用

安装后,运行 verdaccio 即可启动服务,看到配置的默认路径。
image.png

在浏览器打开 http://localhost:4873/ 即可看到站点的内容。
image.png

在客户端,输入以下命令并输入自己的 npm 账号及密码,即可登录。登录后,就可以发布自己的 npm 包了。

  1. npm adduser --registry http://localhost:4873

同时,我们可以使用 nrm 来管理不同 registry:

  1. npm i -g nrm
  2. nrm list
  3. nrm add verdaccio http://localhost:4873/
  4. nrm use verdaccio

配置

当然,有时需要修改部分默认配置。可以打开上面的配置文件地址。然后根据实际需求进行修改。比如修改 npmjs 地址,这样可以让非私有的包,走淘宝镜像,速度更快。以下为一个示例配置:

  1. # https://github.com/verdaccio/verdaccio/blob/master/conf
  2. storage: /verdaccio/storage
  3. web:
  4. title: Verdaccio
  5. i18n:
  6. web: zh-CN
  7. auth:
  8. htpasswd:
  9. file: /verdaccio/conf/htpasswd
  10. uplinks:
  11. npmjs:
  12. url: https://registry.npm.taobao.org/
  13. cache: false
  14. packages:
  15. '**':
  16. access: $all
  17. publish: $authenticated
  18. unpublish: $authenticated
  19. proxy: npmjs
  20. server:
  21. keepAliveTimeout: 60
  22. middlewares:
  23. audit:
  24. enabled: true
  25. logs:
  26. - { type: stdout, format: pretty, level: http }

修改配置后,可以使用 pm2 来启动服务。

  1. pm2 start verdaccio

结语

以上就是一个私有 npm 库的搭建。总体而言,比较简单。可再根据自己的情况,配置域名之类的即可。