一、背景

当一个 HAR 包(如 b.har)内部依赖另一个 HAR 包(如 a.har),且两个包都以本地文件形式放在工程里时,需要同时在模块级和工程级 oh-package.json5 中做正确配置,否则会出现 bbb 找不到 aaa 的问题。

ohpm ERROR: Run install command failed 
Error: 00617202 Fetch Local Package Failed
Error Message: Fetch local file package error, /Users/wangwh-146538/Documents/e68harmony-domestic/oh_modules/.ohpm/b@gtzr05au10dw6nhxacclguuv2xy5djthket31qbfxpc=/oh_modules/libs/a.har does not exist.

二、工程配置

1. 目录结构示例

MyApplication/
├── AppScope/
├── entry/
│   └── oh-package.json5
├── libs/
│   ├── a.har
│   └── b.har
└── oh-package.json5        ← 工程级配置(关键)

2. 被依赖的 HAR 包(b)的源工程配置

在 b 模块自己的 oh-package.json5 中,要正确声明对 a 的依赖:

{
  "name": "b",
  "version": "1.0.0",
  "dependencies": {
    "aaa": "file:../libs/a.har"    // 打包时 bbb.har 内部会记录对 aaa 的依赖
  }
}

注意:b.har 打包后,它内部对 aaa 的依赖不会被打包进去,只是记录依赖关系。消费方(如 entry)解析 b 时,仍需要能找到 a。

3. 宿主工程(entry)的模块级配置

在 entry/oh-package.json5 中显式声明两个 HAR:

{
  "name": "entry",
  "version": "1.0.0",
  "dependencies": {
    "a": "file:../libs/a.har",
    "b": "file:../libs/b.har"
  }
}

说明:HAR 不支持依赖传递,即 entry → bbb → aaa 这种链式依赖,entry 无法直接使用 aaa 的导出,必须显式声明对 aaa 的依赖。

4. 工程级 oh-package.json5 配置

由于 b.har 内部记录的是 a 的包名依赖,ohpm 在解析 b 时会去找名为 a 的包,但默认找不到你本地 libs/ 下的那个文件。解决办法是在工程根目录 oh-package.json5 中使用 overrides 强制重定向:

{
  "modelVersion": "5.0.0",
  "description": "",
  "dependencies": {
    "a": "file:./libs/a.har",
    "b": "file:./libs/b.har"
  },
  "devDependencies": {
    "@ohos/hypium": "1.0.19"
  },
  "overrides": {
    // 核心配置:拦截全工程(包括 b 内部)对 a 的请求,
    // 重定向到本地具体 .har 文件路径
    "a": "file:./libs/a.har"
  }
}

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐