需求背景
平时在项目工作中可能会用到很多通用性的代码,比如,框架类、工具类以及公用的业务逻辑代码等,通过打包发布到npm中央仓库或者私有仓库,来进行维护和托管代码,方便公用代码的使用。如果涉及到不方便公开的代码组件可以发布到私有仓库。
私有 npm 组件库的优势:
- 私有 npm 包只对公司内部局域网开放
- 速度比直接在 npm 下载包更快,也比使用淘宝镜像快。
- 对于发布和下载 npm 包可以配置权限管理
Verdaccio安装与部署
Verdaccio 是一个轻量级的npm包管理工具,其特点是可以托管私有模块,并且带有缓存功能,当私有仓库中找不到对应模块的时候,会去npm公服上面下载,并缓存起来。
Verdaccio 依赖 nodejs 和 npm 环境,准备材料如下:
- nodejs
- npm
- verdaccio
- 一台服务器
1. 在服务器中安装 nodejs 与 npm(Linux 为例)
PS:在官网下载linux系统的安装包上传到服务器进行解压安装也可以
# 下载wget https://nodejs.org/dist/latest/node-v16.4.0-linux-x64.tar.xz# 解压tar xf node-v16.4.0-linux-x64.tar.xz# 进入解压目录cd node-v16.4.0-linux-x64# 执行node命令 查看版本./bin/node -v# 创建 nodejs 和 npm 的软连接ln -s /usr/local/node-v16.4.0-linux-x64/bin/npm /usr/local/bin/ln -s /usr/local/node-v16.4.0-linux-x64/bin/node /usr/local/bin/# 检查是否配置好node -vnpm -v
2. 全局安装 verdaccio
# 全局安装verdaccionpm i -g verdaccio
3. 配置私有库文件
# 先新建私有库目录mkdir apu-npm# 进入目录cd apu-npm# 运行verdaccioverdaccio
执行结果如下:
Verdaccio doesn’t need superuser privileges. Don’t run it under root. warn —- config file - /root/.config/verdaccio/config.yaml warn —- Plugin successfully loaded: htpasswd warn —- Plugin successfully loaded: audit warn —- http address - http://localhost:4873/ - verdaccio/3.10.2
从控制台的输出可以看到,verdaccio的配置文件路径在/root/.config/verdaccio/config.yaml,默认访问地址http://localhost:4873/
修改verdaccio的配置文件
# 已发布的包的存储位置storage: ./storage# 插件所在的目录plugins: ./plugins# 界面相关的配置web:# WebUI是默认启用的,如果您想禁用它,只需取消这一行的注释# enable: falsetitle: xx-私有库# 用户相关,例如注册、鉴权插件(默认使用的是 htpasswd)auth:htpasswd:# 账户与密码存放地址file: ./htpasswd# 允许注册的最大用户数量,默认为 "+inf".# 您可以将此值设置为-1以禁用注册max_users: 100listen:- 0.0.0.0:4873# 用于提供对外部包的访问,例如访问 npm、cnpm 对应的源uplinks:npmjs:url: https://registry.npmjs.org/# 用于配置发布包、删除包、查看包的权限# 3个关键字: "$all"-所有人, "$anonymous"-未注册用户, "$authenticated"-注册用户packages:# 范围包(例如对于第一个,如果我们发布的包名是这样的 @jex/test 就会命中)'@*/*':# 控制包的访问权限access: $all# 控制包的发布权限publish: $authenticated# 控制包的删除权限unpublish: $authenticated# 如果本地没有可用的私有包,代理会请求'npmjs'仓库proxy: npmjs'*':access: $allpublish: $authenticatedunpublish: $authenticatedproxy: npmjs# 私有库服务端相关的配置server:keepAliveTimeout: 60# 中间件相关配置,默认会引入 auit 中间件,来支持 npm audit 命令middlewares:audit:enabled: true# 终端输出的信息的配置logs:- {type: stdout, format: pretty, level: http}# 发布包推送钉钉群notify:'dingtalk':method: POSTheaders: [{'Content-Type': 'application/json;charset=utf-8'}]# 钉钉机器人的 webhookendpoint: https://oapi.dingtalk.com/robot/send?access_token=****,# 推送内容content: '{"color":"green","message":"新的包发布了: *{{ name }}*","notify":true,"message_format":"text"}'
4. 服务启动
- 远程登录/远程控制进入阿里云服务器
- 在终端窗口中执行命令 verdaccio —config ./config.yaml
5. pm2 管理 verdaccio 进程
使用pm2启动verdaccio,保证该进程一直处于打开状态
安装pm2
npm install -g pm2
使用pm2启动verdaccio,以保证进程一直处于打开状态
pm2 start verdaccio
客户端发布npm包到私有库
1. 用户注册
# 添加用户(确保配置文件开启了允许注册)# 依次按照窗口填写username、password、e-mail 回车提交数据即可npm adduser --registry http://服务器ip:4873
2. 用户登录
# 注册后,自动默认登录,登陆后npm会自动缓存,下次无需再次登录npm login --registry http://服务器ip:4873
3. 如何使用私有仓库npm包
# 将 npm 访问源设置为私库访问源npm config set registry http://服务器ip:4873# 查看本机npm访问源npm config get registry
4. 发布npm包到私有仓库
# 设置了registry为私库访问源可省略--registry参数npm publish --registry http://服务器ip:4873

