# 如何解决私仓上传包失败的问题

## 问题现象

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.
* 场景四：上传包时报错：解析失败！请重新上传。报错页面如下： ![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/21/v3/3ZWNxqyFTIK6KZpc_g66nA/zh-cn_image_0000002628569634.png?HW-CC-KV=V1&HW-CC-Date=20261014T060231Z&HW-CC-Expire=31536000000&HW-CC-Sign=AABCE77E4E9B9DFDCB3516CD4F943E59EBFEEDA7476FCF189D36F7806F963850)

## 背景知识

* [ohpm](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpm-cli)作为OpenHarmony三方库的包管理工具，支持OpenHarmony共享包的发布、安装和依赖管理。
* [ohpm-repo](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpm-repo-overview)是一个搭建轻量级的ohpm私仓服务的工具。它与ohpm包管理器兼容，并按需缓存所有依赖项，加速私有网络中的安装。
* [将三方库发布到ohpm-repo](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpm-repo-quickstart#zh-cn_topic_0000001792256157_将三方库发布到ohpm-repo)。

## 问题定位

* 场景一：检查上传包的格式是否满足ohpm格式要求，格式不对会导致上传报错。
* 场景二：比对上传包的组织名和私仓的组织名，组织名不同的话会无法上传。
* 场景三：根据报错信息可知上传的包是之前发布过的版本，ohpm-repo私仓里发布过的包即使下架了也不能再使用之前发布过的版本。
* 场景四：检查上传方式是否是web管理端上传，部分场景下web管理网页上传会导致解析失败。

## 分析结论

* 场景一：包格式不对会导致上传报错。
* 场景二：上传包的组织名和私仓的组织名不同导致无法上传。
* 场景三：ohpm-repo私仓里发布过的包即使下架了也不能再使用之前发布过的版本。
* 场景四：部分场景下web管理网页上传会导致解析失败。

## 修改建议

* 场景一： 用[ohpm convert](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpm-convert)将指定ohpm或npm仓库中的某个包或者本地node_modules目录下的包转换成满足ohpm格式要求的HAR包，并保存至当前工作目录，转换后的包将支持上传至ohpm-repo私仓或OpenHarmony三方库中心仓。

* 场景二： 尝试把har包的组织替换成私仓的组织名：打出来的har包，可以使用tar解压 -> 修改oh-package.json5中name -> 再原样压缩回去 -> 发布。

* 场景三：
  * 方案一（推荐）：包改用之前未用过的版本号。
  * 方案二：
    1. 停止当前私仓服务；
    2. 打开私仓的部署目录（私仓启动的时候，可以看到部署到哪里的config file path:xxx)，找到文件夹db下的package_manifest.json文件；
    3. 删除文件中与下架版本相对应的包数据；
    4. 重新启动私仓，然后上传包。
* 场景四： 可以尝试使用命令行工具发布包：

  * 静态共享包HAR包： 执行 ''ohpm publish <HAR包路径>'' 命令发布HAR包，<HAR包路径> 指向的文件后缀需为.har文件的具体路径。

  * 动态共享包HSP包： 动态共享包HSP包不能直接发布在ohpm-repo内，需要先转化为.tgz包，转换方法见：[编译HSP模块](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hsp#section1833373964217)。TGZ包的发布流程同HAR一致。执行 ''ohpm publish <TGZ包路径>'' 命令发布TGZ包，< TGZ 包路径> 指向的文件后缀需为.tgz文件的具体路径。

  参考文档：[使用命令行工具发布](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-ohpm-repo-quickstart#zh-cn_topic_0000001792256157_使用命令行工具发布)。

