nexus-cli 目前分成四类能力:
- 本地 npm 工具:
npm-cache、npm-pkg - Nexus3 命令:
backup-download、backup-upload、component-download、component-upload - Nexus2 导出命令:
nexus2-backup-download、nexus2-component-download - Nexus2 导入命令:
nexus2-backup-upload、nexus2-component-upload
更多按场景组织的案例见 docs/use-cases.md。
旧的 upload、npm-down、npm-pack 已从 CLI 移除,其中 npm 相关命令改名为 npm-cache、npm-pkg。
仓库已经添加 GitHub Actions 流水线:
push/pull_request:自动执行go test ./...,并交叉构建linux/darwin/windows的amd64/arm64制品- 推送
v*tag:自动创建 GitHub Release,并上传 6 个平台压缩包和checksums.txt
发版方式:
git tag v0.1.0
git push origin v0.1.0Release 产物命名示例:
nexus-cli_v0.1.0_linux_amd64.tar.gznexus-cli_v0.1.0_linux_arm64.tar.gznexus-cli_v0.1.0_darwin_amd64.tar.gznexus-cli_v0.1.0_darwin_arm64.tar.gznexus-cli_v0.1.0_windows_amd64.zipnexus-cli_v0.1.0_windows_arm64.zip
如果你的目标是:
- 给前端项目做依赖离线缓存:用
npm-cache - 把本地
node_modules/.pnpm重新打成 tarball:用npm-pkg - 备份整个 Nexus3 Maven 或 npm 仓库:用
backup-download - 把备份重新恢复到 Nexus3:用
backup-upload - 只迁移某一个 Maven 组件:用
component-download+component-upload - 只迁移某一个 npm 包:用
component-download+component-upload - 从 Nexus2 导出 Maven 或 npm 数据:用
nexus2-backup-download或nexus2-component-download - 把 Nexus3 的备份数据导入 Nexus2:用
nexus2-backup-upload或nexus2-component-upload
用途:
- 从
package-lock.json - 从
yarn.lock - 或从现有
node_modules
解析 npm tarball 地址并下载到本地目录,适合做离线缓存或制品预热。
示例:
go build -o nexus-cli .
./nexus-cli npm-cache ./package-lock.json ./store
./nexus-cli npm-cache ./yarn.lock ./store
./nexus-cli npm-cache ./node_modules ./store
./nexus-cli npm-cache -k ./package-lock.json ./store用途:
- 扫描项目下的
.pnpm或node_modules - 对每个发现的包执行一次
npm pack - 把生成的
.tgz放到指定目录
适合把“已经安装好的依赖”重新导出为 tarball。
示例:
go build -o nexus-cli .
./nexus-cli npm-pkg ./my-project ./store用途:
- 从 Nexus3 下载整个 Maven 仓库
- 或下载整个 npm 仓库
- 生成
nexus-cli-backup.json清单和assets/文件目录
示例:
go build -o nexus-cli .
./nexus-cli backup-download \
--format maven \
--base-url https://host \
--repository maven-releases \
-u admin -p 123456 \
./backup
./nexus-cli backup-download \
--format npm \
--repo-url https://host/repository/npm-hosted \
-u admin -p 123456 \
./backup用途:
- 把
backup-download导出的备份重新恢复到 Nexus3 - Maven 按 repository path 逐个 PUT 回仓库
- npm 按
.tgz逐个调用 Nexus3components上传接口
示例:
go build -o nexus-cli .
./nexus-cli backup-upload \
--format maven \
--repo-url https://host/repository/maven-releases \
-u admin -p 123456 \
./backup
./nexus-cli backup-upload \
--format npm \
--base-url https://host \
--repository npm-hosted \
-u admin -p 123456 \
./backup用途:
- 下载指定 Maven 组件
- 或下载指定 npm 包
- 输出为可回传的备份目录
Maven 示例:
./nexus-cli component-download \
--format maven \
--repo-url https://host/repository/maven-releases \
--group-id com.example \
--artifact-id demo \
--version 1.0.0 \
-u admin -p 123456 \
./componentnpm 示例:
./nexus-cli component-download \
--format npm \
--repo-url https://host/repository/npm-hosted \
--name @scope/demo \
--version 1.0.0 \
-u admin -p 123456 \
./component用途:
- 上传指定 Maven 组件备份
- 或上传指定 npm
.tgz/ npm 组件备份目录
Maven 示例:
./nexus-cli component-upload \
--format maven \
--repo-url https://host/repository/maven-releases \
-u admin -p 123456 \
./componentnpm 示例:
./nexus-cli component-upload \
--format npm \
--base-url https://host \
--repository npm-hosted \
-u admin -p 123456 \
./package.tgz这组命令的目标是:
- 输入
backup-download或component-download产出的 Nexus3 备份目录 - 或者输入 npm
.tgz - 导入到 Nexus2 仓库
用途:
- 把 Nexus3 的整库备份目录导入到 Nexus2
- 也支持导入一个组件备份目录,只是语义上更推荐整库备份时使用
Maven 示例:
./nexus-cli nexus2-backup-upload \
--format maven \
--repo-url https://host/content/repositories/releases \
-u admin -p 123456 \
./backupnpm 示例:
./nexus-cli nexus2-backup-upload \
--format npm \
--repo-url https://host/content/repositories/npm-hosted \
-u admin -p 123456 \
./backup用途:
- 把一个 Nexus3 组件备份导入到 Nexus2
- Maven 可直接输入组件备份目录
- npm 可输入组件备份目录或单个
.tgz
Maven 示例:
./nexus-cli nexus2-component-upload \
--format maven \
--repo-url https://host/content/repositories/releases \
-u admin -p 123456 \
./componentnpm 示例:
./nexus-cli nexus2-component-upload \
--format npm \
--repo-url https://host/content/repositories/npm-hosted \
-u admin -p 123456 \
./package.tgz这组命令的输出格式与 backup-download / component-download 一致:
- 产出
nexus-cli-backup.json - 产出
assets/目录 - 可直接导回 Nexus3
- 也可以再导回 Nexus2
用途:
- 从 Nexus2 导出整个 Maven 仓库
- 或导出整个 npm 仓库
- 输出为统一备份格式
Maven 示例:
./nexus-cli nexus2-backup-download \
--format maven \
--repo-url https://host/content/repositories/releases \
-u admin -p 123456 \
./backupnpm 示例:
./nexus-cli nexus2-backup-download \
--format npm \
--repo-url https://host/content/repositories/npm-hosted \
-u admin -p 123456 \
./backup用途:
- 从 Nexus2 导出指定 Maven 组件
- 或导出指定 npm 包
- 输出为单组件备份目录
Maven 示例:
./nexus-cli nexus2-component-download \
--format maven \
--repo-url https://host/content/repositories/releases \
--group-id com.example \
--artifact-id demo \
--version 1.0.0 \
-u admin -p 123456 \
./componentnpm 示例:
./nexus-cli nexus2-component-download \
--format npm \
--repo-url https://host/content/repositories/npm-hosted \
--name demo-pkg \
--version 1.0.0 \
-u admin -p 123456 \
./component./nexus-cli npm-cache ./package-lock.json ./offline-store结果:
offline-store/下会得到一批.tgz
先从源仓库下载:
./nexus-cli component-download \
--format maven \
--repo-url https://source-host/repository/maven-releases \
--group-id com.example \
--artifact-id demo \
--version 1.2.3 \
-u sourceUser -p sourcePass \
./demo-backup再上传到目标仓库:
./nexus-cli component-upload \
--format maven \
--repo-url https://target-host/repository/maven-releases \
-u targetUser -p targetPass \
./demo-backup先备份:
./nexus-cli backup-download \
--format npm \
--repo-url https://source-host/repository/npm-hosted \
-u sourceUser -p sourcePass \
./npm-backup再恢复:
./nexus-cli backup-upload \
--format npm \
--repo-url https://target-host/repository/npm-hosted \
-u targetUser -p targetPass \
./npm-backup先从 Nexus3 导出:
./nexus-cli backup-download \
--format maven \
--repo-url https://source-host/repository/maven-releases \
-u sourceUser -p sourcePass \
./maven-backup再导入 Nexus2:
./nexus-cli nexus2-backup-upload \
--format maven \
--repo-url https://target-host/content/repositories/releases \
-u targetUser -p targetPass \
./maven-backupnpm 也是同样的思路:
./nexus-cli backup-download \
--format npm \
--repo-url https://source-host/repository/npm-hosted \
-u sourceUser -p sourcePass \
./npm-backup
./nexus-cli nexus2-backup-upload \
--format npm \
--repo-url https://target-host/content/repositories/npm-hosted \
-u targetUser -p targetPass \
./npm-backup先从 Nexus2 导出:
./nexus-cli nexus2-component-download \
--format maven \
--repo-url https://source-host/content/repositories/snapshots \
--group-id com.example \
--artifact-id demo \
--version 1.0.0-SNAPSHOT \
-u sourceUser -p sourcePass \
./component再导入 Nexus3:
./nexus-cli component-upload \
--format maven \
--repo-url https://target-host/repository/maven-snapshots \
-u targetUser -p targetPass \
./componentnpm 也是同样流程:
./nexus-cli nexus2-component-download \
--format npm \
--repo-url https://source-host/content/repositories/npm-hosted \
--name demo-pkg \
--version 1.0.0 \
-u sourceUser -p sourcePass \
./component
./nexus-cli component-upload \
--format npm \
--repo-url https://target-host/repository/npm-hosted \
-u targetUser -p targetPass \
./componentbackup-download 或 component-download 的输出大致如下:
backup/
├── nexus-cli-backup.json
└── assets/
└── ...
Maven 示例:
backup/
├── nexus-cli-backup.json
└── assets/
└── com/example/demo/1.0.0/
├── demo-1.0.0.jar
└── demo-1.0.0.pom
npm 示例:
backup/
├── nexus-cli-backup.json
└── assets/
└── @scope/demo/-/
└── demo-1.0.0.tgz
-k/--insecure:跳过 HTTPS 证书校验,适合自签名证书环境- 所有 Nexus 地址都必须显式带
http://或https:// --base-url传 Nexus 根地址,例如https://host--repository传仓库名,例如maven-releases、npm-hosted--repo-url传完整仓库地址,例如https://host/repository/maven-releases- Nexus2 的
--repo-url形式通常是https://host/content/repositories/<repo>
- Nexus3:支持 Maven / npm 的整库备份恢复、指定组件下载上传
- Nexus2:支持 Maven / npm 的整库导出、指定组件导出,以及把 Nexus3 备份数据导入到 Maven / npm 仓库
- 当前仓库额外保留了
LatestVersion的 Go 实现,可用于读取maven-metadata.xml获取三段式版本号中的最新版本