HarmonyOS鸿蒙Next中如何解决使用ohpm发布包到私仓报404错误

HarmonyOS鸿蒙Next中如何解决使用ohpm发布包到私仓报404错误

【问题现象】

使用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_idpublish_registrykey_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%2fohpmhsplib
     # $uri: /repos/ohpm/@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报错。

更多关于HarmonyOS鸿蒙Next中如何解决使用ohpm发布包到私仓报404错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中如何解决使用ohpm发布包到私仓报404错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用ohpm发布包到私仓报404错误

通常是由于以下几个原因:

  1. 私仓地址配置错误:检查ohpm配置文件中的私仓地址是否正确,确保地址完整且可访问。

  2. 权限问题:确保你有权限访问和发布到该私仓。检查私仓的访问权限设置,确认你的账户具备发布权限。

  3. 私仓服务未启动或不可用:确认私仓服务正在运行,并且可以从你的网络环境中访问。

  4. 包名或版本冲突:检查你发布的包名和版本是否在私仓中已存在,避免重复发布。

  5. ohpm版本问题:确保你使用的ohpm版本与私仓服务兼容,必要时更新ohpm到最新版本。

  6. 网络问题:检查网络连接是否正常,确保没有防火墙或代理阻止访问私仓。

  7. 私仓配置问题:确认私仓的配置文件是否正确,特别是与ohpm相关的配置项。

如果以上检查均无误,可以尝试重新发布,或查看私仓日志以获取更详细的错误信息。

回到顶部