使用verdaccio搭建私有npm仓库

574 阅读3分钟

使用verdaccio搭建私有npm仓库

背景

  1. 公司内部开发的私有包,统一管理,方便开发和使用,尤其版本管理需要统一;
  2. 加速,自己搭建npm 服务器,本身可以自带常用package的缓存, cnpm 有一些包存在路径问题,而由于公司内部网络不可以访问部分网站,导致npm 的速度有些感人,自建的服务器会缓存下载过的包,能节省时间;
  3. 安全性,作为安全公司,既要保证组件的使用方便也要保证组件的私有性。

工具: verdaccio

为什么选择verdaccio? 免费!市面上付费的软件大概有下面几种:

  1. 付费选择:
  • 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

下载:

  1. 命令:wget https://nodejs.org/dist/v10.6.0/node-v10.6.0-linux-x64.tar.xz;
  2. 文件: 通过官网 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 -vnpm -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

image.png

登录注册

根据verdaccio提示进行用户名、密码、邮箱注册 npm adduser --registry http://localhost:4873/ // 注册 npm login --registry http://localhost:4873/ // 登录 image.png

工具

1.nrm 仓库源管理工具

nrm(npm registry manager )是npm的镜像源管理工具,有时候国外资源太慢,使用这个就可以快速地在 npm 源间切换

image.png

安装

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…