基于npm+verdaccio+nrm打造C++私有依赖仓库
1、准备工作
1.1 准备node环境
准备nrm环境
npm install --location=global nrm
准备verdaccio环境
npm install --location=global verdaccio
2、配置工作
verdaccio用来建立仓库源
2.1 verdaccio配置
a. 命令行启动verdaccio
verdaccio
b. 定位配置文件
打开http address,可以查看是否启动成功。
c. 根据需要更改配置文件(此处以建立本地私有C++依赖包仓库为例)
// An highlighted block
# 更改verdaccio管理包存储目录
storage: F:/programs/DEV
...
# https://verdaccio.org/docs/configuration#uplinks
# a list of other known repositories we can talk to
# 在当前引用仓库不能找到依赖包时 会根据如下设置去搜索依赖包
# 可以屏蔽关掉
uplinks:
npmjs:
# url: https://registry.npmjs.org/
# 淘宝镜像
url: https://registry.npmmirror.com/
...
# Learn how to protect your packages
# https://verdaccio.org/docs/protect-your-dependencies/
# https://verdaccio.org/docs/configuration#packages
# 此处设置建立自定义仓库
packages:
# 建立一个本地仓库
'@local-office-pack/*':
# local office pc C++ dependencies
# $all:任意用户
# $anonymous:仅匿名用户
# $authenticated:仅授权用户
access: $authenticated
publish: $authenticated
'@*/*':
# scoped packages
access: $all
publish: $authenticated
unpublish: $authenticated
#代理 表示没有的仓库会去这个npmjs 里面去找,
#npmjs 又指向 https://registry.npmjs.org/,就是上面的 uplinks 配置
proxy: npmjs
...
...
# https://verdaccio.org/docs/configuration#max-body-size
# 此处设置verdaccio管理的单个包的大小限制
# 当verdaccio发布的包的大小超出此数值时,会抛错:"request entity too large"
# 考虑C++库 或者 C++库代码 量级比较大 此处设置64mb
max_body_size: 64mb
...
# https://verdaccio.org/docs/configuration#listen-port
# listen:
# - localhost:4873 # default value
# - http://localhost:4873 # same thing
# 打开配置0.0.0.0:4873 允许外部ip都可以访问此服务
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
# - https://example.org:4873 # if you want to use https
# - "[::1]:4873" # ipv6
# - unix:/tmp/verdaccio.sock # unix socket
...
d. ctrl&c停止verdaccio运行,再重新启动
verdaccio -c “C:\Users\xxx\AppData\Roaming\verdaccio\config.yaml”
更改配置 重启verdaccio应用 需要调用此命令 否则会沿用老的配置
e. 创建verdaccio授权用户
npm adduser --registry=http://localhost:4873/
根据提示顺序往下操作
可以指定命名空间 具体操作见附录.npm adduser
f. verdaccio用户管理实践:
1个管理员用户 + 多个空间用户
管理用户支持对verdaccio全域的操作
空间用户仅仅支持对特定命名空间域的操作
针对特定命名空间的实践:
“npm init"初始化包的时候需要指定命名空间(“npm init --scope=@my-name”)或者“init"调用过程中,手动在包名字加上”@my-name/包名”
然后"npm login"登录的时候,选择针对该空间的空间用户
否则只有支持全域的账号可以操作。
2.2 nrm配置
nrm用来管理管理 npm registry
a. 查看存在npm的registry(带*号的表示目前正在使用的源)
nrm ls
b. 添加npm源
nrm add npm源名字 http://localhost:4873/
c. 切换npm源
nrm use npm源名字
3、verdaccio依赖包管理
a. 新建测试项目Test1
b. 在Test1目录下初始化为npm包
npm init
按照提示一步步操作
c. 如果verdaccio不是以守护进程方式启动,先ctrl&c关闭verdaccio,使用pm2启动守护进程,这一步可以根据用户自己选择操作。
# 若没有安装pm2 先安装pm2
npm install --location=global pm2@latest
# 通过pm2启动verdaccio
pm2 start “@verdaccio安装目录\bin\verdaccio”
此处需要注意:
1.windows系统下,只有当pm2和verdaccio位于同一目录时,才可以通过命令"pm2 start verdaccio"启动
2.windows系统下,pm2 start @程序路径,@程序路径必须是用双引号包裹,否则pm2启动的时候,路径会自动变为 “cmd当前所在路径+@程序路径”,不能正常使用。
# 通过pm2查看verdaccio的运行状态
pm2 describe verdaccio
pm2常用命令见附录.pm2常用命令
pm2日志目录位于:C:\Users\xxx.pm2\logs\
d. 登录verdaccio账户
npm login --registry=http://localhost:4873/
按照提示一步步往下操作
npm whoami:查看当前登录的用户
e. 发布包
npm publish --registry=http://localhost:4873/
根据提示一步步往下操作
如果是已经发布的包,修改了内容,修改package.json文件中的"version"字段后,使用相同命令即可发布
f. 查看发布包
浏览器打开http://localhost:4873/,即可查看发布完成的依赖包
g. 删除发布完成的包
npm unpublish <包的名字> --registry=http://localhost:4873/
h. 依赖包安装
# 切换依赖包的源
nrm use @私有仓库的源
# 安装依赖包
npm install @依赖包
或者 先写好 package.json文件 自动拉取包
具体参考windows下nodejs使用
附录
附录.pm2常用命令
# Fork mode
pm2 start app.js --name my-api # Name process
# Cluster mode
pm2 start app.js -i 0 # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max # Same as above, but deprecated.
pm2 scale app +3 # Scales `app` up by 3 workers
pm2 scale app 2 # Scales `app` up or down to 2 workers total
# Listing
pm2 list # Display all processes status
pm2 jlist # Print process list in raw JSON
pm2 prettylist # Print process list in beautified JSON
pm2 describe 0 # Display all information about a specific process
pm2 monit # Monitor all processes
pm2 show [process] # Showing the process metadata
# Logs
pm2 log [process] # Display the process log
pm2 logs [--raw] # Display all processes logs in streaming
pm2 flush # Empty all log files
pm2 reloadLogs # Reload all logs
# Actions
pm2 stop all # Stop all processes
pm2 restart all # Restart all processes
pm2 reload all # Will 0s downtime reload (for NETWORKED apps)
pm2 stop 0 # Stop specific process id
pm2 restart 0 # Restart specific process id
pm2 delete 0 # Will remove process from pm2 list
pm2 delete all # Will remove all processes from pm2 list
# Misc
pm2 reset <process> # Reset meta data (restarted time...)
pm2 updatePM2 # Update in memory pm2
pm2 ping # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart