问题现象
ohpm-repo私仓上传包报错,具体表现包括但不限于以下几种场景:
- 场景一:通过web管理端上传.tgz文件时提示“tgz文件中找不到.har或者.hsp文件”。
- 场景二:上传的har包组织名是A,ohpm-repo私仓的组织名是B,无法上传。
- 场景三:上传包时报错:ohpm ERROR: Publish failed, detail: HttpCode 400, The package "xxx" was once published, but has been unpublished, please change the package version and publish it again.
- 场景四:上传包时报错:解析失败!请重新上传。报错页面如下:

问题定位
- 场景一:检查上传包的格式是否满足ohpm格式要求,格式不对会导致上传报错。
- 场景二:比对上传包的组织名和私仓的组织名,组织名不同的话会无法上传。
- 场景三:根据报错信息可知上传的包是之前发布过的版本,ohpm-repo私仓里发布过的包即使下架了也不能再使用之前发布过的版本。
- 场景四:检查上传方式是否是web管理端上传,部分场景下web管理网页上传会导致解析失败。
分析结论
- 场景一:包格式不对会导致上传报错。
- 场景二:上传包的组织名和私仓的组织名不同导致无法上传。
- 场景三:ohpm-repo私仓里发布过的包即使下架了也不能再使用之前发布过的版本。
- 场景四:部分场景下web管理网页上传会导致解析失败。
修改建议
- 场景一:
用ohpm convert将指定ohpm或npm仓库中的某个包或者本地node_modules目录下的包转换成满足ohpm格式要求的HAR包,并保存至当前工作目录,转换后的包将支持上传至ohpm-repo私仓或OpenHarmony三方库中心仓。
- 场景二:
尝试把har包的组织替换成私仓的组织名:打出来的har包,可以使用tar解压 -> 修改oh-package.json5中name -> 再原样压缩回去 -> 发布。
- 场景三:
- 方案一(推荐):包改用之前未用过的版本号。
- 方案二:
- 停止当前私仓服务;
- 打开私仓的部署目录(私仓启动的时候,可以看到部署到哪里的config file path:xxx),找到文件夹db下的package_manifest.json文件;
- 删除文件中与下架版本相对应的包数据;
- 重新启动私仓,然后上传包。
- 场景四:
可以尝试使用命令行工具发布包:
- 静态共享包HAR包:
执行 ''ohpm publish <HAR包路径>'' 命令发布HAR包,<HAR包路径> 指向的文件后缀需为.har文件的具体路径。
- 动态共享包HSP包:
动态共享包HSP包不能直接发布在ohpm-repo内,需要先转化为.tgz包,转换方法见:编译HSP模块。TGZ包的发布流程同HAR一致。执行 ''ohpm publish <TGZ包路径>'' 命令发布TGZ包,< TGZ 包路径> 指向的文件后缀需为.tgz文件的具体路径。
参考文档:使用命令行工具发布。