HarmonyOS鸿蒙Next中A模块依赖B模块,B模块依赖C模块

HarmonyOS鸿蒙Next中A模块依赖B模块,B模块依赖C模块 A模块 依赖B模块,B模块依赖C模块, 后面发现A也需要C模块的功能,这种官方建议如何依赖

我试过C如果是har包,A依赖B后,是不能直接引用C模块的。

3 回复

你可以在A模块中引用C模块中的ts类、接口和资源。

步骤1:在C模块中使用export 导出需要给其他模块使用的类

步骤2:如果需要在项目/模块A中引用C模块的类,需要在项目/模块A下的oh-package.json5文件夹中声明dependencies,示例:“harC”: “file:…/harC”

步骤3:在项目/模块A中需要引用C模块的地方使用import 来导入需要用到的C模块中的类

官网参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/har-package-V13#引用har的arkui组件

添加依赖项:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-hvigor-dependencies-V13

引用共享包:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-har-import-V13

额外信息:

幽灵依赖:未在项目 oh-package.json5 中声明的依赖,在项目中如果依然被直接引用,被称之为“幽灵依赖”现象。这就会导致问题:间接依赖版本的不可控性。如果代码里使用到某个版本的间接依赖,不同时间安装的依赖可能版本不一致,程序运行可能出现意想不到的错误。

举例说明:依赖关系是project->A(1.0.0)->B(^1.0.0)->C (latest),在dependencies只声明了A,但是工程中import了B和C。而B和C的版本是不可控的,如果C的开发者发布了一个2.0.0的版本,下次安装依赖时,可能会安装C @2.0.0的版本。然后就有可能出现一些玄学问题,例如:在代码没有任何改动的情况下,程序运行却出现报错,不同时间不同PC上构建的应用运行表现不一致等。

ohpm为了解决幽灵依赖的问题,设计了一个特殊的存储结构,从技术上进行限制、不允许引用间接依赖,从而避免出现幽灵依赖问题。禁止幽灵依赖的表现就是:代码里只能引用A,引用B或C就会编译报错,提醒用户修改依赖配置。

更多关于HarmonyOS鸿蒙Next中A模块依赖B模块,B模块依赖C模块的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,模块之间的依赖关系是通过模块描述文件(module.json5)来定义的。A模块依赖B模块,B模块依赖C模块,这种依赖链需要在各自的模块描述文件中明确声明。

具体来说,A模块的module.json5文件中需要声明对B模块的依赖,而B模块的module.json5文件中则需要声明对C模块的依赖。依赖关系通常通过"dependencies"字段来指定,该字段包含了所依赖模块的名称和版本信息。

例如,A模块的module.json5文件可能包含如下内容:

{
  "module": {
    "name": "A",
    "dependencies": [
      {
        "module": "B",
        "version": "1.0.0"
      }
    ]
  }
}

B模块的module.json5文件可能包含如下内容:

{
  "module": {
    "name": "B",
    "dependencies": [
      {
        "module": "C",
        "version": "1.0.0"
      }
    ]
  }
}

C模块的module.json5文件则不需要声明依赖,除非它依赖其他模块。

在构建时,HarmonyOS的构建系统会解析这些依赖关系,确保在编译和链接过程中,A模块能够正确访问B模块的接口,而B模块能够正确访问C模块的接口。这种依赖链的管理确保了模块化开发的灵活性和可维护性。

在HarmonyOS鸿蒙Next中,如果A模块依赖B模块,而B模块又依赖C模块,这种依赖关系可以通过模块描述文件(如module-info.json)进行声明。具体步骤如下:

  1. 声明B模块依赖C模块:在B模块的module-info.json文件中,添加对C模块的依赖声明。
  2. 声明A模块依赖B模块:在A模块的module-info.json文件中,添加对B模块的依赖声明。

这样,A模块将间接依赖C模块,系统会在构建和运行时自动解析并加载所需的模块。确保所有模块的依赖关系正确声明,以避免编译或运行时错误。

回到顶部