HarmonyOS鸿蒙Next中多Module设计

HarmonyOS鸿蒙Next中多Module设计 指南:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/application-package-overview

工程管理:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-using

更推荐使用本文部署模型小节中介绍的common、features、product三层工程结构。工程结构示例如下所示:

1、机制

支持多模块设计:可以将一个庞大的项目拆分为很多个模块,每个模块负责自己独立业务。有利于分功写作,有利于我们项目功能划分和维护。每个模块还可以独立编译、运行。它是鸿蒙系统的一种架构。按照指定模式来设计就能满足我们的项目设计要求。

支持多设备适配:每个模块独立开发,并且每个模块都以可设计支持的设备类型。应用开发完成后上架市场。根据你的module支持设备类型动态进行分配。比如pad打开应用市场看到的就是支持pad的软件或者指定的一些模块打包后应用。

2、Module的类型

项目中要采用多模块来设计,模块只要分为两类:

AbilityModule:这种模块是可以独立编译、打包、运行。相当于一个公司的子公司。独立运行,也可以和总公司一起运行。对应到程序:电商项目主模块,物流信息可以设计为子模块,这个模块可以再手机上和其它业务一起运行。也可以独立放在车机、手表上运行。

LibraryModule:实现代码和资源的共享。一个大的项目我们可以拆分业务,放在每一个模块中运行。这些模块无法独立打包出来运行,必须依赖整个项目。帮助我们分功协作,也可以帮助项目业务拆分后维护。从开发的角度上来说,一个模块就类似于一个独立的项目,项目中要用到公共工具或者代码,没有提取公共模块,每个模块就要重复写。Library类型的Modeule分为两类Static和Shared,编译后会生成共享包。

3、HAP模块

HAP:这种模块创建出来,可以代表独立的一个项目。这个模块打包后的后缀为hap,可以独立运行到设备,夜能独立上架应用市场

步骤:

选择feature模块,我们项目开发,允许多个feature模块。只允许一个entry模块。

可以把地图、支付相关的一些功能独立出去放在这个模块中,多模块之间是可以进行通信的。

4、HSP模块

HSP:这个模块type类型为shared,打包过后的包名hsp格式。无法独立编译和运行。必须依赖entry或者application模块来运行。

任何一个模块都可以引入shared模块中的内容。当成公共共享模块。

特点:多个模块引入shared模块内容。最终项目打包的时候只会生成一个hsp模块,进行代码共享。

步骤:

一般在项目中只会 创建一个shared模块。名字common代表公共模块内容。工具包、公共组件都存放在common模块中。

查看module.json5

{
  "module": {
    "name": "common",
    "type": "shared",
    "description": "$string:shared_desc",
    "deviceTypes": [
      "phone",
      "tablet",
      "2in1"
    ],
    "deliveryWithInstall": true,
    "pages": "$profile:main_pages"
  }
}

每个模块都可以引入这个common模块中的内容。但是最后打包的时候会产生一份hsp减少代码体积。以后修改了公共的代码,其它页面都将直接修改。

暴露公共代码:

common里面写的代码基本上都是其它模块要用的公共代码。所以代码写完了将对象内容暴露出去,其它模块才能引入

在common/index.ets文件中

export { add } from './src/main/ets/utils/Calc'

entry模块加载common

common是一个独立的模块,里面的内容如果需要使用,你要将common模块引入到其它模块中,作为一个依赖项。其它模块在开发代码的时候,找对应模块中函数,先找自己本身有没有,没有内容找依赖项中有没有

oh_module:存放自己的依赖和三方依赖

如:common模块就是自己的依赖,axios属于三方依赖

在项目根目录的oh_package.json5文件中引入依赖包

{
  "modelVersion": "5.0.1",
  "description": "Please describe the basic information.",
  "dependencies": {},
  "devDependencies": {
    "@ohos/hypium": "1.0.19",
    "@ohos/hamock": "1.0.0",
    "common": "file:./common",
  }
}

运行这个依赖包,进行打包配置

在oh_module查看common包是否加载成功

entry/index.ets文件中引入

import {add} from "common"
@Entry
@Component
struct MainIndex {
  @State message: string = 'Entry Index';

  aboutToAppear(): void {
    console.log(`${add(1,2)}`)
  }
  build() {
    Column() {
      Text(this.message)
        .fontSize(30)
    }
    .height('100%')
    .width('100%')
  }
}

5、HAR模块

har和hsp都属于无法独立运行,但是可以将模块放在主模块中使用

har模块一旦被主模块或者features模块使用,打包的时候独立一份代码放在对应模块中多个模块使用,打包会打包成多分文件

适合用于存放项目中指定某些业务,从主模块中独立出来。

电商项目中:支付模块、购物车模块、商品列表都独立为har,在页面中引入使用

步骤:

在项目陌路下面创建一个文件夹features

选中features创建一个module

features下创建的全部都是har模块

打开指定模块的module.json5文件

{
  "module": {
    "name": "paylibrary",
    "type": "har",
    "deviceTypes": [
      "default",
      "tablet",
      "2in1"
    ]
  }
}

暴露与导入

在paylibrary中找到index.ets

export { MainPage } from './src/main/ets/components/MainPage'

在entry或者其他hap模块引入指定paylibrary

在项目的oh_package.json文件中加入下面导入代码。在点击run打包模块

import {add} from "common"
import { MainPage } from "paylibrary"
@Entry
@Component
struct MainIndex {
  @State message: string = 'Entry Index';
  aboutToAppear(): void {
    console.log(`${add(1,2)}`)
  }
  build() {
    Column() {
      Text(this.message)
        .fontSize(30)
      MainPage()
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中多Module设计的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中多Module设计的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,多Module设计是一种将应用功能模块化的开发方式,有助于提升代码的可维护性和复用性。每个Module可以独立开发、测试和部署,通常包括UI、业务逻辑和资源等。通过oh-package.json文件管理依赖,Module之间通过接口进行通信。这种设计模式特别适合大型项目,能够有效降低耦合度,提高开发效率。

回到顶部