做广告公司网站建设,河北省网站备案系统,wordpress 实战视频教程,外贸人才网属于什么电子商务模式前言 组件化一直是移动端比较流行的开发方式#xff0c;有着编译运行快#xff0c;业务逻辑分明#xff0c;任务划分清晰等优点#xff0c;针对Android端的组件化#xff0c;之前有比较系统的总结过相关文章#xff0c;感兴趣的朋友#xff0c;可以查看#xff0c;点击…前言 组件化一直是移动端比较流行的开发方式有着编译运行快业务逻辑分明任务划分清晰等优点针对Android端的组件化之前有比较系统的总结过相关文章感兴趣的朋友可以查看点击直达与Android端的组件化相比HarmonyOS的组件化可以说实现起来就颇费一番周折因为HarmonyOS经过更新迭代之后最新的开发方式已经和之前兼容AOSP阶段有着很大的区别基于最新的Api9以及采用全新的ArkTs语言的开发方式想实现组件化就需要另谋途径。 在以往的Android组件化实现中我们直接可以在gradle里进行自定义配置相关参数执行application和library以及其他的参数信息来实现一个可运行模块和依赖模块的动态转换这是非常方便的但是在HarmonyOS中构建文件中除了使用系统配置的之外是不支持自定义的起码当前是不支持的也就是说我们无法通过在构建里来实现组件化运行的切换。 这就在一定程度上阻碍了组件化的配置虽然我们可以按照动态包的模式拆分出独立的业务模块形成模块化开发但是在业务逻辑复杂的项目很多的模块同时编译运行无疑来说是耗时的远远比不上组件化方式的开发效率基于此能够探索出组件化的可行性确实是很有必要的。 本文的大致如下 1、模块化的拆分与设计
2、模块化向组件化切换
3、鸿蒙项目如何实现组件化
4、使用脚本快速实现组件化运行
5、脚本地址和相关总结 一、模块化的拆分与设计 模块化简而言之就是把项目中独立的业务模块抽取出来单独创建一个模块。 原始的开发方式我们都会把所有的代码所有的业务放在一个模块下以至于导致此模块代码越来越多业务越来越繁杂不利于人员的维护也不利于项目的可移植和健壮最大的不便在于后续一旦有同样功能的项目不能第一时间拿来复用为解决以上的问题便有了模块化。 具体在项目中需要把哪些功能抽取成一个单独的模块需要具体问题具体分析但有一个潜在的宗旨那就是必须业务独立比如项目中的用户信息模块商城模块再比如底层的网络请求模块数据库操作模块等等只有业务独立才能方便后续的复用。 当然了有一个前提大家必须明确那就是后续的组件化是在模块化的基础上只是增加了单模块可以运行的能力。 如下图所示是基于API9和ArkTs语言设计的模块化。 以上只是一个通用的场景在实际的开发中大家可以按照实际的业务进行修改比如省略聚合层直接让中间层依赖基础库层又或者中间层直接依赖底层的sdk等等灵活多变即可。 entry作为我们的主模块是单独可以运行的除了这个模块之外其他的所有模块均不可运行只能被作为依赖项使用。 从上图中大家可以发现存在基础库一层此层的作用主要封装了基础能力比如网络数据操作日志工具类列表加载等等目的是显而易见的就是为了便于拓展和后续的复用因为这些能力是统一的是每个项目都或多或少都是需要的前期封装好之后无论后续多少个项目我们都可以直接拿来用。 聚合层它的作用是把多个基础库包装成一个整体的库更方便上层的调用但缺点也是很明显的有些可能上层用不到的基础库也被添加进来了造成包体积的增大还有就是基础库某个更新之后聚合层也需要更新所以基于此在实际的开发中大家也可以省略这一层直接让中间层和基础库层进行对接。 中间层common一些公用的资源或者类的存放地也作为各模块数据传递的一个纽带它做为一个枢纽是业务各模块的必依赖项。 业务模块没什么好说的是业务层各个单独的业务组件。 相关的模块化拆分如下的项目所示 二、模块化向组件化切换 在上述的模块化中我们知道组件化和模块化是类似的只不过多了一个独立运行的功能别小看这个独立运行的能力在实际的开发中能大大减少我们的编译时间提高我们的开发效率毕竟全部编译和局部编译还是有着很大的差距。 在模块化中只有entry主模块是能够独立运行的如果向组件化进行切换意味着业务中每个独立的模块都可以运行如下结构图 也就是把业务模块需要做成动态设置组件化时类型是entry可运行状态非组件化时类型是shared也就是动态包方式不可运行。 三、鸿蒙项目如何实现组件化 经过上一节的概述实现组件化就非常的简单了无非就是业务模块的类型entry和shared切换即可可是实际操作之后缺发现不是仅仅修改一个类型便可以搞定的。 由于可运行组件和动态包有着很大的区别如果想要把动态包改为可运行那么所有的配置信息都要和运行组件保持一致经过仔细地比对之后发现有三处不同分别如下 开发环境 DevEco Studio 4.0 Beta2,Build Version: 4.0.0.400 Api版本9 hvigorVersion3.0.2 如果你的开发环境和以上不一致那么几处文件的不同之处也会不一样只需要改为你环境下的可运行模块也就是entry下的即可。 1、hvigorfile.ts不同 主模块entry可运行 import { hapTasks } from ohos/hvigor-ohos-plugin;export default {system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
} 普通模块动态包不可运行 import { hspTasks } from ohos/hvigor-ohos-plugin;export default {system: hspTasks, /* Built-in plugin of Hvigor. It cannot be modified. */plugins:[] /* Custom plugin to extend the functionality of Hvigor. */
} 2、module.json5不同 主模块entry可运行 {module: {name: entry,type: entry,description: $string:module_desc,mainElement: EntryAbility,deviceTypes: [phone,tablet],deliveryWithInstall: true,installationFree: false,pages: $profile:main_pages,abilities: [{name: EntryAbility,srcEntry: ./ets/entryability/EntryAbility.ts,description: $string:EntryAbility_desc,icon: $media:icon,label: $string:EntryAbility_label,startWindowIcon: $media:icon,startWindowBackground: $color:start_window_background,exported: true,skills: [{entities: [entity.system.home],actions: [action.system.home]}]}]}
} 普通模块动态包不可运行 {module: {name: mine,type: shared,description: $string:shared_desc,deviceTypes: [phone,tablet],deliveryWithInstall: true,pages: $profile:main_pages}
}3、缺少入口ability 普通的动态包是没有Ability这就导致的无入口配置。 主模块entry可运行 普通模块动态包不可运行 只需要把以上的三处不同更改之后便可以达到组件的单独运行需要注意的是更改完之后一定记得清除缓存清除之前的配置信息方可运行成功。 虽然手动更改能达到组件的运行目标但会有一个潜在的问题那就很影响开发效率你需要在可运行和不可运行两种状态下不停的进行切换那么就需要不断地进行更改这三处文件是非常繁琐的不过后续经过自己的摸索开发了一个动态修改配置信息的脚本使用脚本便可很简单的进行切换。 四、使用脚本快速实现组件化运行 鸿蒙的项目不像Android端可以在gradle进行脚本的编写所以无法很方便的进行组件化的实现虽然不能配置脚本文件但是能否借助外部的脚本来动态的进行组件化的切换呢显然是可以的在HarmonyOS开始阶段环境配置我们使用到了NodeJs那么我们就可以通过NodeJs来开发相关脚本。 脚本没什么难的只解决一个问题那就是把手动需要改的文件改为程序去改减少错误率和提高开发效率。 下载脚本之后有三个文件如下图所示把文件复制到根项目下即可。 module.harmony主要配置文件所有的配置都在这里以后的使用也只要更改这一个文件即可。 #组件化配置文件
#是否开启组件化
startModuletrue
#开启的组件名字开启后当前的组件可以独立运行
startModuleName
#上述组件开启后其他非必要组件是否改为动态包模式,默认不改变
startOtherSharedfalse
#过滤组件名字永远不会独立运行以应为逗号作为分割
filterModuleName
#当前脚本默认加载的页面默认不填是Index.ets
loadPage module.js脚本逻辑文件主要进行组件化的内容之间的切换。 package.json一些配置信息用于执行。 module.harmony文件介绍 三个文件复制到根项目下之后当然了你也可以复制到其他地方只关注module.harmony这一个文件即可以后所有的操作都在这里进行配置。 module.harmony文件里最重要的就两个参数一个是startModule一个是startModuleNamestartModule用于是否开启组件化startModuleName是负责开启哪个组件两个是结合使用的。当startModule为true自动就会把startModuleName的值对应的组件改为可运行状态当startModule为false就只保留entry模块为可运行状态其他均为不可运行。 startOtherShared这个参数主要用于是否要把startModuleName对应的组件之外的所有组件不包含entry和过滤组件改为动态包模式比如A模块改为可运行组件之后又想把B模块改为可运行组件这时是否要把A改回去也就是动态包不可运行状态。 filterModuleName参数没啥好说的如果项目中有固定状态的模块就可以配置其中。 loadPage参数默认配置的是Index.ets没有会自动创建如果你有默认的页面可以配置这里运行组件后会展示你配置的页面。 脚本运行 每次更改完配置文件module.harmony后在当前项目的根目录下执行如下的命令即可。 npm run module 五、脚本地址和相关总结 脚本下载地址 https://gitee.com/abnercode/harmony-os-module 脚本开发环境 DevEco Studio 4.0 Beta2,Build Version: 4.0.0.400 Api版本9 hvigorVersion3.0.2 目前的组件化方式和Android端的组件化有些类似如果你的项目很庞大比如项目里也有很多独立的小功能类似美团App中的外卖骑车等那么我们就可以采取多hap的结构开发目前鸿蒙是支持的这种应用是独立的隔离的如果所有的模块都有着一定的耦合关联一个主模块和多个动态模块的形式建议还是以文中组件化的方式开发可以大大提高你的编译速度。