HarmonyOS鸿蒙Next中Har模块源码依赖另一个Har模块,如何打包给其他工程使用?

HarmonyOS鸿蒙Next中Har模块源码依赖另一个Har模块,如何打包给其他工程使用? Har A源码依赖了Har B

{
    "dependencies": {
      "harB": "../harB"
    }
}

打包Har A和Har B给其他工程同时依赖使用,回包Har A找不到Har B的依赖

Error: 00617301 Fetch Source Code Failed

Error Message: Fetch local folder package error, /oh_modules/.ohpm/harA@nuxihtc6ta4um33viypr4tk09xcnfpzfmqs1p0fl9zk=/oh_modules/harB does not exist.

如何打包Har A 和Har B给其他工程依赖使用?


更多关于HarmonyOS鸿蒙Next中Har模块源码依赖另一个Har模块,如何打包给其他工程使用?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

开发者你好,HAR可以依赖其他HAR,但不支持循环依赖,也不支持依赖传递。因此想要使用什么依赖,需要直接将其依赖进来。

1、引用本地模块源码(该本地模块必须与宿主模块归属于同一个工程),如entry模块需要依赖foo模块的源码,有如下两种方式:

  • 方式一:在Terminal窗口中,切换到需要引入本地模块源码的模块,即entry模块下,执行如下命令进行安装,并会在该模块下的oh-package.json5中自动添加依赖。
    cd path/to/your/project/entry
    ohpm install path/to/foo
    
  • 方式二:在需要引入本地模块源码的模块的oh-package.json5中设置源码依赖项,即entry模块的oh-package.json5中,添加如下配置:
    "dependencies": {
      "foo": "file:path/to/foo"  // 此处也可以是以当前oh-package.json5所在目录为起点的相对路径
    }
    

2、HAR模块间动态import依赖解耦,根据条件导入模块或者按需导入模块,防止循环依赖。

当应用包含多个HAR包,HAR包之间的依赖关系比较复杂。在DevEco Studio中配置依赖关系时,可能会形成循环依赖。这时,如果HAR之间的依赖关系中仅有变量动态import,可以将HAR包之间直接依赖关系转移到HAP/HSP中配置,HAR包之间无需配置依赖关系,从而达到HAR包间依赖解耦的目的。

参考当前依赖方式是否可以解决你的问题,如果不行请反馈。

更多关于HarmonyOS鸿蒙Next中Har模块源码依赖另一个Har模块,如何打包给其他工程使用?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


你没有理解我的问题。当前HAR A源码依赖Har B,打包成A.har后仍然是保持着源码依赖HAR B的方式,把A.har和B.har同时引入工程,A.har就会找不到对HAR B依赖,因为仍然是以源码方式去查找,而不是找到B.har 我想知道的是Har A在源码依赖Har B的前提下,如何打包Har A和Har B才能让其他应用正常依赖Har A和Har B,才不会出现HAR A无法找到HAR B的情况,

尊敬的开发者,您好!您的问题已受理,请您耐心等待,感谢您的理解与支持!

尊敬的开发者,您好!该功能正在规划中,还请关注后续版本,感谢您的理解与支持。

您好,其他工程需要同时配置依赖两个HarA和HarB,例如:

{
  "dependencies": {
    "harA": "../harA",  // 显式依赖 Har A
    "harB": "../harB"   // 显式依赖 Har B(注意!)
  }
}
  1. 检查Har A、Har B模块中的module.json5文件里type字段是否为har类型。
  2. 检查library中的oh-package.json5文件dependencies字段中是否已添加对Har A、Har B模块编译产物的依赖。

具体解决方案可查看官网示例:【怎么解决打包时依赖的Har包没有打进去的问题】

在library中的oh-package.json5文件dependencies字段中添加对Har A、Har B模块编译产物的依赖还是不行 按照文档描述,我需要修改Har A对Har B的依赖为依赖Har B的编译产物,且Har B的编译产物需要放到Har A的lib目录下 但是这种方式对于开发过程不友好,开发阶段我希望能保持源码依赖Har B 现在想知道的是Har A在源码依赖Har B的前提下,如何打包Har A和Har B才能让其他应用正常依赖Har A和Har B?

在HarmonyOS Next中,将依赖其他Har模块的Har模块打包给其他工程使用,需要确保依赖关系正确配置。在模块的oh-package.json5文件中声明所有依赖的Har模块。使用DevEco Studio的打包功能,生成包含所有依赖的.har文件。其他工程通过ohpm安装该.har文件后,其依赖的Har模块也会被自动解析和引入。

在HarmonyOS Next中,当Har A源码依赖Har B时,直接打包Har A会导致其他工程无法解析其依赖。这是因为源码依赖路径("../harB")在其他工程中无效。正确的做法是将Har B发布到共享仓库(如公司私有OHPM仓库或本地仓库),然后修改Har A的依赖配置为版本依赖

具体步骤如下:

  1. 发布Har B: 在Har B的根目录下执行命令,将其打包并发布到指定的仓库。

    ohpm publish
    

    发布前需在oh-package.json5中配置正确的publishAs和版本号,并在oh-package-lock.json5中配置仓库地址(registry)。

  2. 修改Har A的依赖声明: 将Har A对Har B的依赖从源码路径依赖改为发布的版本依赖

    • 修改前 (oh-package.json5):
    "dependencies": {
      "harB": "../harB"
    }
    
    • 修改后 (oh-package.json5):
    "dependencies": {
      "harB": "1.0.0" // 使用Har B发布的确切版本号
    }
    
  3. 发布Har A: 在Har A的根目录下执行ohpm publish,将其发布到同一仓库。

  4. 其他工程引用: 在其他工程的oh-package.json5中,只需声明对Har A的依赖即可。OHPM包管理器会自动解析并下载Har A及其传递性依赖Har B。

    "dependencies": {
      "harA": "1.0.0" // Har A的版本号
    }
    

核心要点

  • 禁止传递源码依赖:Har模块的dependencies中不应包含本地相对路径(.././),这类路径无法在其他工程中复用。
  • 依赖必须可寻址:所有依赖必须是通过registry可获取的已发布包(Har或三方npm包)。
  • 传递性依赖自动管理:只要Har A的依赖配置正确(使用版本号),依赖Har A的工程会自动获取Har B,无需显式声明。

通过将依赖关系“标准化”为版本管理,即可解决打包共享问题。

回到顶部