文档管理中心

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

问题现象

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作为OpenHarmony三方库的包管理工具,支持OpenHarmony共享包的发布、安装和依赖管理。
  • ohpm-repo是一个搭建轻量级的ohpm私仓服务的工具。它与ohpm包管理器兼容,并按需缓存所有依赖项,加速私有网络中的安装。
  • 将三方库发布到ohpm-repo。

问题定位

  • 场景一:检查上传包的格式是否满足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 -> 再原样压缩回去 -> 发布。

  • 场景三:
    • 方案一(推荐):包改用之前未用过的版本号。
    • 方案二:
      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模块。TGZ包的发布流程同HAR一致。执行 ''ohpm publish <TGZ包路径>'' 命令发布TGZ包,< TGZ 包路径> 指向的文件后缀需为.tgz文件的具体路径。

    参考文档:使用命令行工具发布。