Artifactory迁移NPM制品至新仓库时生成0字节package.json的问题求助
Artifactory移动NPM制品后无法生成package.json:"List argument metadata must not be empty" 问题解析与解决
报错含义说明
Failed precondition. List argument metadata must not be empty 是Artifactory在生成NPM仓库的聚合package.json时触发的异常:
Artifactory的NPM元数据索引逻辑会收集同包名下所有版本的元数据,用于生成包含所有版本信息的聚合package.json。当该元数据列表为空时,代码中的非空校验失败,直接抛出此异常,导致聚合package.json生成失败。
从堆栈跟踪可以看到,异常触发点在NpmUtils.updateAndGetLatest方法——该方法需要从元数据列表中筛选最新版本,但列表为空时无法完成逻辑,因此抛出错误。
问题根因分析
结合你遇到的场景,问题源于Artifactory特定版本的元数据索引逻辑缺陷:
- 首次发布制品时,Artifactory直接从上传的制品包中提取元数据,流程完整,能正常生成聚合
package.json; - 当将单个版本的制品迁移/推广到无同包其他版本的空仓库时,Artifactory未能正确从已迁移的制品中提取元数据,导致元数据列表为空,触发校验失败;
- 当目标仓库中已有同
@<group>/<artifactid>的其他版本制品时,元数据列表不为空,索引逻辑能正常执行,因此可以生成有效的聚合package.json。
该问题在Artifactory 7.46.11和7.49.5版本中可复现,属于版本特定bug。
缓解与解决方法
临时缓解方案
- 先迁移同包的其他版本
先将同@<group>/<artifactid>下的任意其他版本制品迁移到目标仓库,再迁移目标版本。此时元数据列表不为空,索引逻辑可正常执行,生成聚合package.json。 - 手动触发仓库索引重建
- 登录Artifactory后台,进入目标NPM仓库的仓库设置页面
- 找到索引模块,点击重建索引(Rebuild Index)
- 等待索引任务完成后,检查目标路径
.npm/@<group>/<artifactid>/package.json是否生成
- 手动上传聚合package.json
从原仓库复制该制品对应的聚合package.json,手动上传到目标仓库的.npm/@<group>/<artifactid>/路径下,直接补全缺失的元数据文件。
长期解决方案
升级Artifactory到7.50及以上版本——JFrog在后续版本中修复了该元数据索引逻辑缺陷,彻底解决单个版本制品迁移后无法生成聚合package.json的问题。
内容的提问来源于stack exchange,提问作者Sander
相关产品推荐
相关产品推荐

