本文仅是技术验证,记录,交流,不针对任何人。有冒犯的地方,请谅解。 该文首发于https://vsnail.cn/static/doc/blog/verdaccio.htmlhtml
目前项目组以及公司的前端项目愈来愈多,业务系统划分愈来愈精细,那么前端项目之间的公共组件、公共服务应该如何抽取、如何维护、如何管理,这些问题就愈显突出。所以搭建 npm 私服,将公共组件和服务以包的形式进行管理,经过版本号的形式进行发布,能够有效的管理公司、项目组内部的公共组件及服务。同时经过权限设置,也能够有效的保护公司成果不被泄露。除此以外,因为前端每次打包都须要从新拉取第三方包,这个步骤的速度依赖于网络以及第三方镜像。npm 私服能够设置缓存,第一次拉取第三方包后,之后的拉取将直接从 NPM 私服上进行,这样将会极大的提高打包编译速率。前端
网上主要有几种搭建企业 npm 私服的方式:node
MyGet
NPM Org
DIY NPM
Git
,这也是一种选择,在package.json
中指定git
仓库的URL
便可,可是这种作法有些别扭,第一,使得package.json
不够优雅,第二,当git
仓库为private
时,你须要HTTPS
或SSH
凭据,并且一般咱们并无每一个团队的权限。Sinopia
verdaccio
排除付费,可选择的其实也就DIY NPM
、Sinopia
、verdaccio
。从社区活跃度来讲,基本都选择了verdaccio
。verdaccio
是一个极简单的开源的NPM
服务。linux
找个合适的地方下载安装nodejs
,好比在/usr/local/lib
下git
安装wget
(已经安装的跳过这步)github
yum install -y wget;
复制代码
下载:web
wget https://npm.taobao.org/mirrors/node/v12.14.0/node-v12.14.0-linux-x64.tar.xz
复制代码
解压:shell
tar -xvf node-v10.6.0-linux-x64.tar.xz;
复制代码
重命名安装目录:npm
mv node-v10.6.0-linux-x64 nodejs;
复制代码
创建软链接:json
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 i verdaccio -g;
复制代码
全局安装pm2
,用来守护node
进程:
npm i pm2 -g;
复制代码
pm2
启动服务,执行
pm2 start verdaccio;
复制代码
而后浏览器访问http://
服务器IP
,出现如下页面则表明安装成功。
pm2 start ** // 启动;
pm2 reload ** //重启 ;
pm2 logs *** // 日志
verdaccio
容许任何人建立帐号,若没有配置verdaccio
的配置文件config.yaml
,则默认任何注册了verdaccio
的开发都有publish
权限。看个实例:
如下都以
http://1.1.1.1:4873
服务为例。注意要其余机器能访问,必需要修改配置文件。可参考进阶的配置
npm adduser --registry http://1.1.1.1:4873
.npmrc
文件,添加如下内容registry=http://1.1.1.1:4873
复制代码
package.json
中设置好版本,执行npm publish
查看http://1.1.1.1:4873
。可返现网站上已有列表
向上面这样,确定是不能知足咱们的需求的。咱们须要权限可控(添加用户,请求、发布、撤销包),UI 可配置。先看看verdaccio
提供的配置
verdaccio
默认配置#包缓存路径
storage: ./storage
# 网站配置
web:
#网站标题
title: verddico
#网站logo
logo: /root/.config/verdaccio/logo.png
#网站导航栏背景色
primary_color: "#3894ff"
#权限配置
auth:
# 内置的htpasswd权限插件
htpasswd:
# 用户列表文件
file: ./htpasswd
# 用户最大数目。-1表示不能在随意注册。
max_users: -1
# 外部包管理仓库地址
uplinks:
npmjs:
url: https://registry.npmjs.org/
packages:
'@*/*':
access: $all
publish: $authenticated
proxy: npmjs
'**':
proxy: npmjs
logs:
- {type: stdout, format: pretty, level: http}
复制代码
若是外网须要访问,那么必须在config.yaml
增长如下配置
listen: 0.0.0.0:4873
复制代码
按照默认配置,咱们能够经过
npm adduser --registry=http://1.1.1.1:4873
复制代码
这样能够随意的注册用户。可是对于公司私服来讲,一般不但愿这样。所以咱们能够经过如下配置来禁止随意注册用户。
auth:
htpasswd:
file: ./htpasswd
max_users: -1
复制代码
问题来了,这样之后,咱们如何增长用户呢?能够有如下两种方式:
./htpasswd
文件。npm install sinopia-adduser -g
复制代码
安装好该插件,在./htpasswd
目录下,运行如下命令
sinopia-adduser
复制代码
verdaccio
默认引入了htpasswd
插件。可是这个插件只能以user
的角度去设置权限。而实际中,咱们一般想经过分组来设置权限。
因为第三方权限组件都有权限服务器,而咱们仅仅只想有个按分组来设置权限的功能便可.所以本身写了一个简单的分组权限插件
verdaccio-simplegroup
。github
地址:https://github.com/btshj-snail/snail-verdaccio-group
。
npm install verdaccio-simplegroup -g
复制代码
在config.yaml
配置文件中,增长相应的配置
auth:
htpasswd:
file: ./htpasswd
max_users: -1
simplegroup:
admin_group: Jack Lucy
base_group: Jack
packages:
'@company/*':
access: $authenticated
publish: admin_group
unpublish: admin_group
proxy: npmjs
'@base/*':
access: $authenticated
publish: base_group
unpublish: base_group
proxy: npmjs
'**':
access: $all
publish:
unpublish:
proxy: npmjs
复制代码
ok
,增长了以上配置,基本能够达到可以使用的程度了。吐槽一下,verdaccio
提供的默认网站 UI 真的有点low
,提供的可配置地方又比较少。原本还想写一个网站的插件,但想一想最近的时间,来仍是之后再弄吧。