实现Npm私有仓库的方式有很多种,例如Gitlib私有仓库
、cnpm
、sinopia
和verdaccio
。Gitlib私有仓库
与cnpm
配置很繁琐,不适合快速开发,sinopia
已7年多未维护。那剩下只能选择verdaccio
了。
verdaccio
的前身是sinopia
,因为sinopia
的作者突然宣布不维护,一些开发大神就收起该烂摊子,基于sinopia@1.4.0
开发了verdaccio
并一直维护至今。
利用verdaccio部署一个属于自己的私有npm仓库
安装
因为verdaccio
只能运行在Node v12
以上的环境,在安装前先检查当前Node版本
并将其切换到v12
以上。
1 | # 查看node.js版本 |
启动
当我们安装完verdaccio
以后,在cmd命令行
工具输入 verdaccio
如果看到输出下面这样的信息,说明启动成功了:
1 | info --- config file - C:\Users\mdguozhaoxi\AppData\Roaming\verdaccio\config.yaml |
根据上面的提示我们可以指导,服务是运行在了本地的4873端口的,那么我们在浏览器里输入http://localhost:4873 看到如下页面,就说明我们的verdaccio服务运行成功!
1 | # 添加一个用户 |
配置
打开宝塔面板的终端工具,登录我自己的服务器。使用上述方式安装verdaccio,安装完毕执行verdaccio -h,发现只有两个参数可修改默认配置。
- –listen:简写为
-l
,监听端口,默认是4873 - –config:简写为
-c
,配置文件,不同系统路径会不一样
打开FTP工具,找到/root/.config/verdaccio
目录中创建config.yaml
文件,执行vim /root/.config/verdaccio/config.yaml
,加入以下内容。
1 | # url_prefix: /npm/ |
搭建Npm私有仓库的目的是让托管模块仅对团队成员开放,该仓库只服务具备权限的团队成员且禁止团队外的开发者注册,当然可让其他开发者查看,因此团队成员拥有查看模块、发布模块和删除模块的权限,团队外的开发者拥有查看模块的权限。
packages
中使用**
表示普通模块
,使用@*/*
表示范围模块
,提供以下参数设置模块的控制权限。
- proxy:上行链路的代理仓库
- access:访问权限
- publish:发布权限
- unpublish:删除权限
剩余三个参数可选$all
/$anonymous
/$authenticated
,分别表示所有用户
、匿名用户
和注册用户
。若该仓库不对外公布所有私有模块,可将这三个参数全部设置为$authenticated
。
完善所有配置后,将监听端口改成8888,将配置文件改成/tool/verdaccio/config.yaml,执行以下命令启动应用。
1 | verdaccio -l 8888 -c /tool/verdaccio/config.yaml |
pm2常驻
1 | pm2 start verdaccio --name verdaccio -- --listen 0.0.0.0:8888 |
使用
注册用户
1 | npm adduser --registry http://localhost:4873/ |
若将Npm私有仓库
部署到外网,其他开发者除了能查看模块,还能通过执行npm adduser --registry https://npm.guozhaoxi.top/
注册用户。为了保障Npm私有仓库
的安全性与私密性,最好在部署到外网前将所有团队成员注册为Npm私有仓库
用户,再配置config.yaml
限制新用户注册。
登录用户
1 | npm login |
输入用户名、密码和邮箱即可。
删除用户
不可避免团队成员的人员变动,因此删除这些离职或转岗的成员的控制权限是必然的。目前verdaccio
暂未提供相关解决方案,可通过一个小技巧解决该问题。
上述提到verdaccio
使用htpasswd
实现用户验证相关功能,而auth-htpasswd-file
指定的配置文件是./htpasswd
,那对应文件路径是/tool/verdaccio/htpasswd
。
执行vim /tool/verdaccio/htpasswd,找到那人的账号,整行删除,接着就无那人啥事了。
发布模块
1 | npm publish |
删除模块
1 | npm unpublish |
安装模块
对于一个刚拉取下来的项目执行npm i
,就会自动识别哪些模块是私有模块。有时并不是所有场景都需提前执行nrm use ynpm
,单独安装一个私有模块时指定其Npm私有仓库
的镜像即可。
1 | npm i <pkg> --registry http://npm.guozhaoxi.top/ |