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
更多关于HarmonyOS鸿蒙Next中多Module设计的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,多Module设计是一种将应用功能模块化的开发方式,有助于提升代码的可维护性和复用性。每个Module可以独立开发、测试和部署,通常包括UI、业务逻辑和资源等。通过oh-package.json
文件管理依赖,Module之间通过接口进行通信。这种设计模式特别适合大型项目,能够有效降低耦合度,提高开发效率。