私有npm仓库搭建与使用
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的第三方包到本地使用。允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
一、为什么需要私有npm仓库
- 安全:内部源码不能发布到npm上开源,避免业务代码公开
- 免费:在npm上发布私有内容需要收费
- 效率:统一管理积累内部开发资源,提高开发效率
二、技术选型
- sinopia 不考虑,好几年没更新了
- cnpmjs 太笨重了,使用的方式基于作用域,略显繁琐
- verdaccio 轻量,使用简单,基于registry的概念,侵入少 👏👏👏👌
三、verdaccio搭建步骤-使用docker-安装在一组开发服务器上
1.下载镜像
docker pull verdaccio/verdaccio
2.容器启动配置
在 /alidata/www 目录下新建 npm 文件夹,并且创建 docker-compose.yml 配置文件
docker-compose是用来编排容器的,主要作用是将容器配置写在配置文件中,避免每次启动都需要手动运行 docker run 一堆东西。
cd /alidata/www
mkdir npm && touch npm/docker-compose.yml
写入以下配置
1 | version: '2' |
主要做了这些事情
- 将 npm/storage 目录挂载到容器的 /verdaccio/storage
- 将 npm/conf 目录挂载到容器的 /verdaccio/conf
- 将 npm/plugins 目录挂载到容器的 /verdaccio/plugins
- 容器和主机端口都设置为4873
/alidata/www/npm 文件夹下的内容可以定期git提交到云效,进行备份。主要包括用户资料,包代码。
3.verdaccio配置
配置说明文档 链接
在 /alidata/www/npm/conf 下新建一个文件
touch npm/conf/config.yaml
1 | storage: /verdaccio/storage |
- htpasswd 存放的是 npm 用户及密码信息的文件。
- uplinks 配置了npm替代地址,这里配置了淘宝源。如果在当前仓库找不相应软件包,就到uplinks配置的源获取。
4.启动容器
docker-compose up -d –build
5.nginx配置
先找到一组服务器的配置文件
ps aux|grep nginx
在 /rrzuji/nginx/conf/vhosts 下新建配置
1 | server { |
6.访问服务 npm.rrzuji.net
出现以下界面说明容器已经正常运行
7.设置访问权限
尝试新建用户,发现出现500错误
查看docker日志,提示 permission denied 显然,这是一个文件权限问题,容器无法访问宿主路径。
docker logs –tail 20 verdaccio
查看文档
执行下面代码,10001是容器内verdaccio使用的UID,65533是GID
sudo chown -R 10001:65533 /alidata/www/npm/conf/htpasswd
sudo chown -R 10001:65533 /alidata/www/npm/storage
测试功能是否正常
到这里安装已经结束。接下来介绍一下如何使用以及注意事项。
四、使用方法
1.安装nrm
没有安装nrm的可以先安装nrm,nrm是用来给npm快速换源的工具。安装好之后,新增一个名为 rnpm 的源。
npm i nrm -g
nrm add rnpm http://npm.rrzuji.net
http://npm.rrzuji.net 相当于私有源+淘宝源的组合,以下统称rnpm。
2.用户注册
3.用户登录
这个登录表示用户登录到rnpm,会在 userconfig 的文件里新增一条登录信息,不会影响到旧的npm用户授权认证记录。nrm use npm 切换后,就变成了npm用户,再 nrm use rnpm,就变成了 rnpm用户。
4.上传软件包
登录后,就可以上传软件包了,进入到软件包目录,执行
npm publish
注意,提交的软件包名需要为私有库的格式(@scope/*),同时也是为了和普通的包区别开来,否则会被拦截。
5.项目安装使用
安装私有包
npm install @scope/browser-version-tool-html
安装私有包和公共npm仓库的包,这是一个混用的例子
npm install @scope/browser-version-tool-html axios
6.删除软件包
npm unpublish
7.更新软件包
更新版本号后,重新发布进行更新
npm publish