使用Verdaccio搭建私有npm仓库
公司前段时间为了提高开发效率, 减少重复造轮子, 搭建了一个私有npm组件仓库, 在此总结一下经验。过程中使用了nrm、pm2、verdaccio进行搭建。

# 服务器环境搭建
- 服务器系统:
Linux CentoOS 7 x64 - 运行环境:
Node.js - 使用工具库:
nrm、pm2、verdaccio、
# 连接到到服务器
ssh root@192.168.1.80
192.168.1.80 是组件库所部署的内部服务IP地址
# 安装所需工具库
安装 Node.js 环境
sudo install epel-release
sudo yum install nodejs
2
Linux安装的是旧版本的 npm ,这里我们更新一下 npm 版本
sudo npm install npm -g
安装依赖环境
sudo npm install verdaccio pm2 nrm -g
- nrm: npm源管理器
- pm2: 进程守护工具
- verdaccio: 运行npm服务器的插件; 支持身份验证、中间件和存储插件
# 配置服务器环境
为了生成verdaccio的配置文件, 需要先在服务器根目录用户根目录运行一次verdaccio
verdaccio
运行成功之后, 修改verdaccio的默认配置文件,
yum install vim #安装vim工具包
vim .config/verdaccio/config.yml #修改配置
2
在配置文件中添加listen:0.0.0.0:4000的配置, 开放verdaccio服务器的端口(默认为4873)。如下图所示:
修改完成后, 退出并保存。
# 启动verdaccio服务
上面我们提到, 启动verdaccio服务只需要在终端运行verdaccio就可以了。但是如果关闭了终端, verdaccio服务就不能一直保持运行了。这个时候我们就需要用到上面安装的pm2进行进程守护, 保持verdaccio持续运行。
pm2 start verdaccio
pm2运行成功后, 终端会显示下图的提示

也可以通过pm2 ls命令查看正在运行进程列表。
为了让同一局域网内的其他设备能够访问到verdaccio服务器, 还需要开放Linux服务器的4000端口(verdaccio服务运行端口)。
更新yum包
yum -y install yum-utils
安装或更新openssl
yum -y install openssl #安装
yum -y update openssl #更新
2
启动
yum-config-manager --enable cr
yum update
2
开放服务器的 4000 端口
firewall-cmd --permanent --add-port=4000/tcp
重新加载防火墙配置
firewall-cmd --reload
现在, 私有npm仓库服务器就已经搭建成功。浏览器访问服务器的地址(这里为192.168.1.96:4000), 就可以看到verdaccio服务器已经在运行。

# 发布npm包到服务器
# 切换到私有npm源
首先,需要把npm源切换到刚刚添加的地址。为了切换起来更方便,这里我们借助nrm 。
添加私有npm源到nrm管理器
nrm add my-npm http://192.168.1.96:4000
my-npm是npm源的别名, 可以根据自己的喜好命名http://192.168.1.96:4000是私有npm的源地址
使用私有npm源
添加完私有npm源后, 可通过nrm ls命令查看已添加的和当前使用的npm源。

# 添加用户
为了把本地的组件库发布到私有npm服务器, 这里还需要添加一个登录npm服务器的账户。
npm adduser #执行完该命令后, 按照提示分别输入用户命、密码和联系邮箱
# 发布npm包
修改package.json文件里的version以修改版本号。或者通过npm version命令对版本号进行修改。
在终端输入npm version --help命令可查看相关说明
进入到组件库源代码的根目录, 登录私有npm服务器。
npm login
发布:
npm publish
等待终端提示发布成功后, 打开浏览器访问服务器地址(此处例子为http://192.168.1.96:4000)即可看到新发布的npm包了✅
执行发布命令前, 需要先通过npm init命令生成package.json文件。package.json上的name属性就是当前组件库在npm服务器上的包名。
# 在实际开发中引入私有npm包
私有npm发布成功后, 只需要像往常一样通过npm install [package_name]即可使用对应的npm包了。比如包名为my-table, 安装方式如下
npm install my-table
End.