Verdaccio 搭建本地私有NPM仓库

1,853 阅读3分钟

私有Npm仓库搭建

什么是私有Npm仓库?

私有Npm仓库是专门给一些公司内部开发者提供的私有Npm包管理仓库,类似还有私有Git仓库

为什么要用私有Npm仓库?

公司内部开发的包有可能是不开源共享的,只是给公司内部人员使用的,那么这些包就不可能上传到Npm官网上

虽然Npm官网也支持私有,但是需要收费。

这时候本地私有Npm仓库就解决了这个问题,本地私有仓库具有免费、本地化、私有化、高速下载的特点。

因为部署在本地,所以下载包的速度是非常快的。

verdaccio

安装

npm install verdaccio -g

启动

verdaccio
# 指定配置启动
verdaccio -c ./config.yaml
# 手动指定端口
verdaccio -l 0.0.0.0:9000

出现下面的内容说明启动成功

warn --- config file  - /home/root/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/4.10.0

启动后会在启动用户的家目录生成一个配置文件 config.yaml

例如:/home/root/.config/verdaccio/config.yaml

主要配置文件

  • config.yaml 启动后生成的是仓库的配置文件,仓库的配置都写在里面
  • htpasswd 当有用户注册后会生成的用户账号信息文件,记录账号和密码以及创建日期
  • storage 所有上传的包都保存在这

配置项

在配置前请一定注意配置文件内的缩进,不然会启动会报错

打开 config.yaml 配置文件,我们可以看到下面几项

  • storage 设置用户上传包的存放目录
  • plugins 插件目录
  • web 前端页面的配置,设置访问页的标题、图片等
  • i18n 设置页面的语言
    • web 设置web的默认语言 zh-CN
  • auth 设置账号相关的内容
    • htpasswd 设置账号密码相关
      • file 存放账号密码的文件目录
      • max_user 最大注册用户,-1 代表禁止注册,但可以手动在账号文件添加
  • uplinks 设置上游匹配,主要用于包匹配不到时,系统该往哪里去找这个包
  • packages 包相关配置,用于设置包的上传、下载、访问的权限控制
    • access 可访问权,能否下载
    • publish 发布权
    • unpublish 取消发布权
    • 权限的控制大致有三种
      • $all 所有登录、未登录者都可以访问
      • $authenticated 只有登录者可以访问
      • a、b、v等 指定用户名、只有该用户可以访问

下面提供一份简易的配置

# 设置保存放目录
storage: ./storage
plugins: ./plugins
web:
  title: Npm
# 设置中文显示
i18n:
  web: zh-CN
# 设置两个上游
uplinks:
  npmjs:
    url: https://registry.npmjs.org/
    agent_options:
      keepAlive: true
      maxSockets: 40
      maxFreeSockets: 10
  cnpmjs:
    url: http://r.cnpmjs.org/
    agent_options:
      keepAlive: true
      maxSockets: 40
      maxFreeSockets: 10
# 添加一项 @my/* 包的权限控制,只允许登录的用户可以下载上传
packages:
  '@my/*':
    access: $authenticated
    publish: $authenticated
    unpublish: $authenticated

# 通配项,即上面配置不到的包都走这个
  '**':
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    # 代理上游、如果本地找不到这个包应该去哪找,可以设置多个,按顺序查找
    proxy: cnpmjs npmjs
# 设置监听端口、以及支持IP访问
listen:
  0.0.0.0:3000

注册账号

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

执行后会让你输入账号、密码、邮箱 一定要记住

在开发中使用

nrm 仓库源管理工具

使用 nrm 可以非常方便的在不同源之间来回切换

安装

npm install -g nrm

添加仓库源

nrm add [name] [url]
# nrm add mynpm http://127.0.0.1:3000

使用仓库源

nrm ls // 列出仓库源
nrm use [name] // 选择仓库源

发布、取消发布NPM包

发布NPM包时一定要 nrm ls 查看是否选中了私有仓库源,否则将会发布到别的NPM仓库中(如果登录过的话)

npm publish
npm unpublish

下载私有NPM包

npm install xxx --registry http://127.0.0.1:3000
# 或
nrm use 私有源
npm install xxx

**注意:**如果换成私有源后使用 npm install 下载非本地包,这时 proxy 代理上游就会起作用,系统会去代理上游选择包,直到最后一个代理。