HarmonyOS 鸿蒙Next 如何解决使用ohpm发布包到私仓报404错误 鸿蒙场景化案例

发布于 1周前 作者 htzhanglong 最后一次编辑是 5天前 来自 鸿蒙OS

【问题现象】

使用ohpm publish发布包到私仓,出现了404报错信息。

点击放大

【背景知识】

【定位思路】

  • 检查publish_registry配置。
  • 检查公钥配置。
  • 检查ohpm-repo和ohpm版本是否支持AccessToken功能。
  • 检查网络连接。
  • 检查包名中是否带有组织名,即含有字符’/’。

【解决方案】

根据定位思路,按照如下步骤进行检查:

(1)查ohpm配置文件.ohpmrc中是否正确配置了publish_registry。ohpm-repo私仓管理地址配置参照publish_registry=http://localhost:8089/repos/ohpm。

(2)如果使用证书认证,确保通过ssh-keygen工具生成的公私钥文件是成对的。确保在ohpm-repo私仓管理界面配置公钥信息,在ohpm的配置文件.ohpmrc中配置publish_id、publish_registry和key_path等参数。

(3)从ohpm-repo 2.1.0和ohpm 1.6.0版本起,开始支持AccessToken。如果当前工具版本不支持该功能,可能会导致404错误,需要升级相应的软件。

(4)确保网络连接正常,避免因网络问题导致的错误。

(5)检查包名中是否带有组织名,即含有字符’/’。ohpm在publish/unpublish时,对于带组织的包名会先进行url encode,即@test/ohpmhsplib–>@test%2fohpmhsplib,再使用encode后的包名作为请求的路径参数,该请求经Nginx转发后,又被decode成了@test/ohpmhsplib,导致在私仓服务器路由匹配失败。推荐Nginx配置如下:

server {
     listen 8081;
     server_name localhost;

     #charset koi8-r;
     #access_log logs/host.access.log main;
     # $request_uri: /repos/ohpm/[@test](/user/test)%2fohpmhsplib
     # $uri: /repos/ohpm/[@test](/user/test)/ohpmhsplib
     location / {
         set $lb_upstream 127.0.0.1:8088;
         set $backend_uri $request_uri;
         if ($uri ~ ^/(.*)) {
         set $backend_uri /$1$is_args$args;
         }

         proxy_http_version 1.1;
         proxy_set_header Connection "";
         proxy_intercept_errors off;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-REQUEST-ID $http_x_request_id;
         proxy_set_header Cookie $http_cookie;
         proxy_set_header Host $http_host;
         proxy_connect_timeout 2;
         add_header 'Access-Control-Allow-Credentials' 'true';
         proxy_buffering off;
         proxy_pass http://$lb_upstream$backend_uri;
         proxy_redirect off;
     }
     # 新增配置
     location /repos/ohpm {
         set $lb_upstream 127.0.0.1:8088;

         proxy_http_version 1.1;
         proxy_set_header Connection "";
         proxy_intercept_errors off;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header X-REQUEST-ID $http_x_request_id;
         proxy_set_header Cookie $http_cookie;
         proxy_set_header Host $http_host;
         proxy_connect_timeout 2;
         add_header 'Access-Control-Allow-Credentials' 'true';
         proxy_buffering off;
         proxy_pass http://$lb_upstream;
         proxy_redirect off;
     }
 }

【总结】

ohpm在publish/unpublish时报错是因为无法找到对应的路径。主要从以下几个方面进行排查解决:

  • 检查publish_registry地址是否配置正确。如果使用证书认证,确认公私钥的相关配置是否正确;
  • 确保工具版本支持AccessToken并且网络连接正常;
  • 检查包名中是否带有组织名,即含有字符’/’;如果包名中带有字符’/’,修改Nginx配置,防止由于url encode导致路径前后不一致引起404报错。
1 回复

针对您提到的HarmonyOS鸿蒙Next在使用ohpm发布包到私仓时遇到404错误的问题,这通常意味着所尝试发布的包或组件在指定的源中不存在或未被正确配置。以下是一些可能的解决方案:

  1. 包名或版本号错误:请确认您发布的包名(如@ohos/component)及版本号是否正确。有时可能因拼写错误或使用了过时的包名导致无法找到。
  2. 源配置问题:检查您的ohpm源配置,确保您正在访问的是正确的、包含所需包的仓库。可以通过ohpm registry list查看当前配置的源列表,并确认是否包含了您的私仓地址。
  3. 网络问题:404错误也可能是由于网络问题导致无法访问源服务器。请检查您的网络连接,并确保可以访问外网及私仓服务器。
  4. 包尚未发布:如果这是一个新包或处于开发阶段,可能尚未在公开源或私仓中发布。请确保包已被正确上传至私仓。

解决此类问题,您需要确保所有配置正确无误,并且网络通畅。同时,由于HarmonyOS生态系统持续更新,请确保您的开发环境和工具链也是最新的状态,以避免兼容性问题。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部