使用verdaccio搭建私有npm仓库
背景
- 公司内部开发的私有包,统一管理,方便开发和使用,尤其版本管理需要统一;
- 加速,自己搭建npm 服务器,本身可以自带常用package的缓存, cnpm 有一些包存在路径问题,而由于公司内部网络不可以访问部分网站,导致npm 的速度有些感人,自建的服务器会缓存下载过的包,能节省时间;
- 安全性,作为安全公司,既要保证组件的使用方便也要保证组件的私有性。
工具: verdaccio
为什么选择verdaccio? 免费!市面上付费的软件大概有下面几种:
- 付费选择:
- MyGet (www.myget.org) 9美元/月,且只能有两个账号和1GB的存储空间。
- NPM Org (www.npmjs.com) 每个账号每月7美元
付费的我们就不考虑了,没这个必要,而且付费的也不是就更好。sinopia搭建十分简单友好,不过这玩意儿已经停止维护了,最近的更新在4年前,但有一群人出了sinopia的一个分支,起了个名字叫verdaccio,这个就是这次主要推荐的方案,这个库一直在积极维护中,github start 7000+,看来还是比较靠谱的,而且国内外各种资料参考下来,这个方案也是受到极力推荐的。verdaccio搭建私服很简单,相比于cnpm搭建,还需要安装配置mysql,这个绝对会少走一些坑。
安装
-
首先我们需要向运维同学申请一台linux服务器,给台2GB左右的虚拟机就够用了;
-
找个合适的地方下载安装nodejs,比如在
/usr/local/lib
下
下载:
- 命令:
wget https://nodejs.org/dist/v10.6.0/node-v10.6.0-linux-x64.tar.xz
; - 文件: 通过官网 nodejs.cn/download/ 下载Linux二进制文件(x64):node-v16.14.0-linux-x64.tar.xz
解压:
`tar -xvf node-v10.6.0-linux-x64.tar.xz`;\
重命名安装目录:
`mv node-v10.6.0-linux-x64 nodejs`;\
建立软连接:
`ln -s /usr/local/lib/nodejs/bin/npm /usr/local/bin/`\
`ln -s /usr/local/lib/nodejs/bin/node /usr/local/bin/`
执行node -v
和 npm -v
命令检查是否安装成功
全局安装verdaccio:
npm: npm i verdaccio -g
;
yarn: yarn global add verdaccio
; (服务器开发需安装yarn) \
配置:
1.修改verdaccio配置文件:
在config.yaml文件 最后添加监听端口: listen: 0.0.0.0:4873
2.本地运行无需配置,服务器需要配置端口以及打开服务器防火墙需要创建此端口 #listen on all address \
启动
verdaccio
登录注册
根据verdaccio提示进行用户名、密码、邮箱注册
npm adduser --registry http://localhost:4873/
// 注册
npm login --registry http://localhost:4873/
// 登录
工具
1.nrm 仓库源管理工具
nrm(npm registry manager )是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换
安装
npm install -g nrm
添加仓库源
nrm add [name] [url]
使用仓库源
nrm ls
// 列出仓库源
nrm use [name]
// 选择仓库源
如上图: my 即时此时我选择的仓库源
2. pm2守护verdaccio进程
安装
npm install -g pm2
yarn add global pm2
启动
pm2 start verdaccio
使用pm2启动verdaccio
这样verdaccio服务就不会被中断了
发布lib包到verdaccio
发布NPM包时一定要 nrm ls
查看是否选中了私有仓库源,否则将会发布到别的NPM仓库中(未登录的话请按照注册流程登录注册)
发布前要确定package.json版本号以及名字是否准确(详细可查上一篇文章)
npm publish
// 发布
npm unpublish [name] --force
// 删除[name]包
注意:如果换成私有源后使用 npm install 下载非本地包,这时 proxy 代理上游就会起作用,系统会去代理上游选择包,直到最后一个代理。
资料来源链接:www.jianshu.com/p/d32ce7e9d…