什么是私有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 设置账号相关的内容
- file 存放账号密码的文件目录
- max_user 最大注册用户,-1 代表禁止注册,但可以手动在账号文件添加
- htpasswd 设置账号密码相关
- uplinks 设置上游匹配,主要用于包匹配不到时,系统该往哪里去找这个包
- packages 包相关配置,用于设置包的上传、下载、访问的权限控制
- $all 所有登录、未登录者都可以访问
- $authenticated 只有登录者可以访问
- a、b、v等 指定用户名、只有该用户可以访问
- access 可访问权,能否下载
- publish 发布权
- unpublish 取消发布权
- 权限的控制大致有三种
下面提供一份简易的配置
# 设置保存放目录storage: ./storageplugins: ./pluginsweb: 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: $authenticatedpublish: $authenticatedunpublish: $authenticated# 通配项,即上面配置不到的包都走这个 '**':access: $allpublish: $authenticatedunpublish: $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 代理上游就会起作用,系统会去代理上游选择包,直到最后一个代理。