前言
去年,针对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文件:
打开文件,内容如下:
text
#组件化配置文件
#组件化开关,用于开启全局的指令,控制下面所有的功能。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版本的脚本简化了很多冗余的文件,仅仅只有一个文件。
第一步、下载脚本:
脚本下载地址:
脚本就是一个js文件,下载之后,复制到项目的根目录下即可。
第二步、执行脚本:
脚本概述:
脚本可分为四块,node start为前两块,为固定模式,第三块是自己想要切换的组件名字,最后一块传递0或1,0是切换至运行包状态,1是切换为动态共享包模式,执行案例如下:
脚本运行:
开启运行模式,点击可运行:
text
node start demo 0
还原动态共享包模式,不可运行:
text
node start demo 1
除此之外,如果说你的默认展示页面不是Index页面,你也可以自定义展示页面路径,其路径必须和main_pages.json保持一致,执行命令如下:
text
node start demo 0 pages/demo
如果一致的话,正常执行上面的两个命令即可。
如果你的命令执行错误,会有相应的错误提示:
同样,当命令执行成功时,也会有相应的提示:
第三步、运行组件:
当组件切换为可运行状态时,就可以点击组件进行运行了,和entry组件运行一样。
如果是真机获模拟器运行,一定要记得选择默认的启动Ability,否则无法进行启动。
组件运行成功:
注意:当以主入口entry打包或者项目统一运行时,请记得把之前的运行包还原为动态共享包。
五、相关总结
hvigor插件形式进行组件化和node脚本形式进行组件化,两者是冲突的,也就是说,当两者同时存在的时候,以hvigor插件形式为主,即便node执行了命令,也不会生效,这一点大家须知。
至于使用哪一种,建议使用hvigor插件形式,优点,不用手动的再去执行命令,提高执行效率,当然了,并不是说node命令形式不好,具体开发中,大家可选择自己喜好。