使用verdaccio搭建npm私有库 pm2守护进程 nrm管理npm源

 

介绍

团队开发用到npm,但公司要求使用的私有npm库方便管理,查找相关资料后决定使用verdaccio搭建npm私有库。话不多说直接开始吧。
参考文献:
verdaccio-npm
pm2-npm
nrm – NPM registry manager

实现思路

  1. 搭建verdaccio私有库
  2. 使用pm2管理进程,避免服务挂掉的情况
  3. 发布安装npm包
  4. 使用nrm管理\切换npm registry

安装步骤

安装verdaccio

  • verdaccioi是 sinopia 开源框架的一个fork,sinopia已经没有人维护了所以建议直接使用verdaccio。使用npm全局安装即可。
    npm install verdaccio -g
  • 测试运行verdaccio,测试是否安装成功。
    成功示例:
    成功示例
    打开http://localhost:4873出现如图所示界面则表示安装成功:
    成功示例

注意

  1. 默认启动服务需要占用4873端口,若启动verdaccio服务失败请检查该端口是否被占用,或者手动修改对应的配置文件。一般路径为C:\Users\用户\AppData\Roaming\verdaccio\config.yaml。修改其中的端口号。
  2. config.yaml配置文件详解
# #号后面是注释
# 所有包的缓存目录这里建议修改放在其他盘不要放在系统盘
storage: ./storage
# 插件目录
plugins: ./plugins

#开启web 服务,能够通过web 访问
web:
  # WebUI is enabled as default, if you want disable it, just uncomment this line
  #enable: false
  title: Verdaccio
#验证信息
auth:
  htpasswd:
    #  用户信息存储目录
    file: ./htpasswd
    # Maximum amount of users allowed to register, defaults to "+inf".
    # You can set this to -1 to disable registration.
    #max_users: 1000

# a list of other known repositories we can talk to
#公有仓库配置
uplinks:
  npmjs:
    url: https://registry.npmjs.org/

packages:
  '@*/*':
    # scoped packages
    access: $all
    publish: $authenticated

    #代理 表示没有的仓库会去这个npmjs 里面去找 ,
    #npmjs 又指向  https://registry.npmjs.org/ ,就是上面的 uplinks 配置
    proxy: npmjs

  '**':
    # 三种身份,所有人,匿名用户,认证(登陆)用户
    # "$all", "$anonymous", "$authenticated"

    #是否可访问所需要的权限
    access: $all

    #发布package 的权限
    publish: $authenticated

    # 如果package 不存在,就向代理的上游服务发起请求
    proxy: npmjs

# To use `npm audit` uncomment the following section
middlewares:
  audit:
    enabled: true
# 监听的端口 ,重点, 不配置这个,只能本机能访问
listen: 0.0.0.0:4873
# log settings
logs:
  - {type: stdout, format: pretty, level: http}
  #- {type: file, path: verdaccio.log, level: info}
着重配置这几点
  • storage:#所有包的缓存目录 建议修改如:D:\npmPackes\storage
  • listen: 0.0.0.0:4873 #建议追加该配置,不配置只能本地访问,若只是本地访问可不用 。
  • 访问控制三种身份:所有人("$all"),匿名用户("$anonymous"),认证(登陆)用户("$authenticated") 。一般发布者都设置成 认证/登陆用户("$authenticated")。安装者设置成所有人("$all")。
  • proxy:代理 表示没有的包verdaccio库会去这个npmjs (即配置中https://registry.npmjs.org/)里面去找.

verdaccio常用问题集锦
转至目录

使用pm2管理进程

在确定verdaccio安装成功的情况下,使用pm2能更好的管理verdaccio服务(需要node.js环境),避免服务被错误关闭,进程被中断的情况。

pm2简介

pm2是node进程管理工具,可以用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。关于pm2的内容这里不做过多介绍,大家可以去官网或者其他博客查看了解,后文会附上pm2的常用命令。

全局安装pm2

npm install pm2 -g

使用pm2启动verdaccio

作者曾经卡在这里很久,也通过国内外找资料,最后解决了。网上说的pm2 start verdaccio 和 pm2 start “which verdaccio” 都不行。最后找到verdaccio安装目录的bin文件夹中的verdaccio启动文件最后启动成功

  • 首先找到verdaccio的安装目录,就是npm 安装全局包的路径。
    我通过配置更改了全局包的路径改为了D:\Node\node_global\node_modules(建议修改nodejs全局包下载存放的路径节省c盘空间,并配置对应环境变量参考博客),默认全局包在C:\Users\Administrator\AppData\Roaming\npm\node_modules
    找到verdaccio文件夹并打开bin文件夹如图:
    启动文件示例
    如图中所示这个verdaccio 的启动文件的路径就是D:\Node\node_global\node_modules\verdaccio\bin\verdaccio

  • 然后
    pm2 start D:\Node\node_global\node_modules\verdaccio\bin\verdaccio
    同理:如果你的pm2的启动路径和verdaccio的启动文件的路径在一个目录下可直接 pm2 start verdaccio
    启动成功如图:
    在这里插入图片描述
    status 为“online”即为成功,然后打开对应地址http://localhost:4873 或者你配置的端口

  • pm2 show verdaccio 查看该进程详细信息

  • pm2 logs 查看错误日志

  • pm2… …pm2常用命令文末附上

    转至目录

使用nrm管理或者切换npm仓库源

nrm – NPM registry manager, nrm是专门用来管理和快速切换私人配置的registry。当使用官方npm源安装各种包比较慢的时候,建议修改npm源地址。公司有属于自己的是有npm仓库建议使用nrm.

  • nrm ls 查看nrm 配置

  • nrm current 查看当前使用的是哪个源

  • nrm add ** 添加npm源,如http://XXX.XXX.XX:4873\ 就可以很方便的切换npm的私有库和共有库了
    nrm add test http://registry.test.org

  • nrm use ** 切换源

  • nrm del ** 删除nrm配置

    转至目录

附:pm2常用命令

$ npm install pm2 -g    # 命令行安装 pm2

$ pm2 start app.js -i 4  # 后台运行pm2,启动4个app.js

                        # 也可以把'max' 参数传递给 start

                        # 正确的进程数目依赖于Cpu的核心数目

$ pm2 start app.js --name my-api # 命名进程

$ pm2 list              # 显示所有进程状态

$ pm2 monit              # 监视所有进程

$ pm2 logs              # 显示所有进程日志

$ pm2 stop all          # 停止所有进程

$ pm2 restart all        # 重启所有进程

$ pm2 reload all        # 0 秒停机重载进程 (用于 NETWORKED 进程)

$ pm2 stop 0            # 停止指定的进程

$ pm2 restart 0          # 重启指定的进程

$ pm2 startup            # 产生 init 脚本 保持进程活着

$ pm2 web                # 运行健壮的 computer API endpoint (http://localhost:9615)

$ pm2 delete 0          # 杀死指定的进程

$ pm2 delete all        # 杀死全部进程
posted @ 2020-12-04 22:05  smile_lg  阅读(636)  评论(1编辑  收藏  举报