HarmonyOs开发:两种方式快速实现NEXT版本组件化运行

举报
程序员一鸣 发表于 2024/10/30 13:21:25 2024/10/30
【摘要】 hvigor插件形式进行组件化和node脚本形式进行组件化,两者是冲突的,也就是说,当两者同时存在的时候,以hvigor插件形式为主,即便node执行了命令,也不会生效,这一点大家须知。

前言


去年,针对Api9总结了鸿蒙项目的组件化运行,感兴趣的可以查看:HarmonyOS开发:探索组件化模式开发,文章中也给大家提供了脚本,可以很快速的实现,虽然Api进行了升级,但之前的脚本依然可以执行,为了更好了适配NEXT版本,针对之前的脚本做了拓展和优化,由单一模式提供了多模式使用,一种是node脚本,另一种就是hvigor插件形式,相对于旧版本,新版的组件化运行更加的便捷,也更加的简单。


本篇的文章内容如下:


1、重温组件化模式开发

2、NEXT版本运行包和动态共享包差异

3、hvigor插件形式进行组件化

4、node脚本形式进行组件化

5、相关总结


一、重温组件化模式开发


之前对于组件化,无论是Android还是鸿蒙,已经总结了很多相关的文章,为什么采用组件化?最大的原因莫过于解耦,使其功能模块之间相互独立,既方便后续的功能复用,也能团队协作之间明细各自的任务开发,减少一定的冲突;除此之外还有一个最突出的能力,那就是减少编译时间,提高运行测试效率。


二、NEXT版本运行包和动态共享包差异


NEXT版本和之前的Api9基本上一致,没有其它地方的差异性,还是三处不一样,第一处:hvigorfile.ts不同,第二处:module.json5不同,第三处,缺少入口ability,具体的就不罗列了,大家可以看之前的文章即可。


三、hvigor插件形式进行组件化


去年开发脚本的时候,hvigor还不支持脚本开发:



NEXT版本升级之后,对这一行为做了拓展,已经可以支持自定义脚本编写,和Android中gradle类似,与之比较,则大大提高了执行效率。


之前基于Api9,还得需要把脚本复制到项目中,然后,npm命令执行脚本,如今有了hvigor,我们就可以在编译时期进行注入,无须其他的文件导入。


第一步、依赖插件


在hvigor文件夹中的json5文件中,导入插件 "quick-assembly": "1.1.0":



点击安装即可。


第二步、调用插件


在hvigorfile.ts文件中,调用插件方法ohosAssembly:



第三步、构建项目



项目构建完成之后,会在项目的根目录生成一个module.harmony文件:



打开文件,内容如下:


#组件化配置文件
#组件化开关,用于开启全局的指令,控制下面所有的功能。0为关,1为开
moduleSwitch=0
#是否开启组件化,0为可运行包,1为共享包
startModule=0
#开启的组件名字
startModuleName=
#当前脚本执行后,组件默认加载的页面,默认不填是Index.ets
loadPage=


这个文件非常重要,以后所执行的功能必须依赖于这个文件,相对于Api9,目前简化成了四个参数,常用的参数就两个。


moduleSwitch参数:是一个全局的指令参数,它的存在可以确保性能和效率的提升,为0时,则构建项目不再执行任何脚本检查,和正常的项目开发保持一致,为1时,则会执行脚本检查,执行动态包和运行包之间的来回切换;建议:开发时为1,打包或统一运行时改为0。


startModule参数:用于是否开启组件化运行模式,0是切换为可运行模式,1则是还原为动态共享包模式。


startModuleName参数:要执行的组件,无论哪种模式,这个一定要存在,用于切换的目标选项。


loadPage参数:是一个可选参数,用于组件运行之后展示的页面,默认是Index.ets,如果不是,在这里可以修改,一般情况下这个参数无用。


第四步、运行项目


修改配置文件为可运行包:



当组件切换为可运行状态时,就可以点击组件进行运行了,和entry组件运行一样。



如果是真机获模拟器运行,一定要记得选择默认的启动Ability,否则无法进行启动。



组件运行成功:




常见错误解决:


正常切换状态后,不经过编译或者同步项目,信息是无法及时更新的,当我们立即进行运行组件时,一般会报如下两个错误:


错误一:



错误二:


解决方式是,修改完状态后,同步下项目再运行组件,或者遇到错误后,再次运行组件即可。


注意:


如果是脚本运行发生了错误,一般会在项目的根目录下生成一个错误日志moduleError.log,大家务必注意查看,方便大家跟踪日志。


四、node脚本形式进行组件化


node脚本形式和Api9实现的方式很类似,但是NEXT版本的脚本简化了很多冗余的文件,仅仅只有一个文件。


第一步、下载脚本:


脚本下载地址:

https://gitee.com/abnercode/harmony-os-module/tree/master/NEXT


脚本就是一个js文件,下载之后,复制到项目的根目录下即可。



第二步、执行脚本:


脚本概述:


脚本可分为四块,node start为前两块,为固定模式,第三块是自己想要切换的组件名字,最后一块传递0或1,0是切换至运行包状态,1是切换为动态共享包模式,执行案例如下:



脚本运行:


开启运行模式,点击可运行:


node start demo 0


还原动态共享包模式,不可运行:


node start demo 1


除此之外,如果说你的默认展示页面不是Index页面,你也可以自定义展示页面路径,其路径必须和main_pages.json保持一致,执行命令如下:


node start demo 0 pages/demo


如果一致的话,正常执行上面的两个命令即可。


如果你的命令执行错误,会有相应的错误提示:



同样,当命令执行成功时,也会有相应的提示:




第三步、运行组件:


当组件切换为可运行状态时,就可以点击组件进行运行了,和entry组件运行一样。




如果是真机获模拟器运行,一定要记得选择默认的启动Ability,否则无法进行启动。



组件运行成功:



注意:当以主入口entry打包或者项目统一运行时,请记得把之前的运行包还原为动态共享包。


五、相关总结


hvigor插件形式进行组件化和node脚本形式进行组件化,两者是冲突的,也就是说,当两者同时存在的时候,以hvigor插件形式为主,即便node执行了命令,也不会生效,这一点大家须知。


至于使用哪一种,建议使用hvigor插件形式,优点,不用手动的再去执行命令,提高执行效率,当然了,并不是说node命令形式不好,具体开发中,大家可选择自己喜好。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。