Hvigor允许开发者实现自己的插件,开发者可以定义自己的构建逻辑,并与他人共享。Hvigor主要提供了两种方式来实现插件:基于hvigorfile脚本开发插件、基于typescript项目开发。下面以基于hvigorfile脚本开发插件进行介绍。
基于hvigorfile脚本开发
基于hvigorfile.ts脚本开发的方式,其优点是可实现快速开发,直接编辑工程或模块下hvigorfile.ts即可编写插件代码,不足之处是在多个项目中,无法方便的进行插件代码的复用和共享分发。
- 导入模块依赖。
// 导入接口
import { HvigorPlugin, HvigorNode } from '@ohos/hvigor'
- 编写插件代码。
在hvigorfile.ts中定义插件方法,实现HvigorPlugin接口。
// 实现自定义插件
function customPlugin(): HvigorPlugin {
return {
pluginId: 'customPlugin',
apply(node: HvigorNode) {
// 插件主体
console.log('hello customPlugin!');
}
}
}
- 在导出声明中使用插件。
export default {
system: appTasks,
plugins:[
customPlugin() // 应用自定义Plugin
]
}
使用hvigorfile插件动态生成navigation防混淆文件
我们在使用navigation的系统路由表时,每次添加新页面,都需要配置一下release环境防混淆。若将这些页面放在一个固定的目录下,则与我们的模块化设计相违背,若命名使用固定的前缀或后缀,总感觉有点多余,手动一个一个的添加,虽然符合我们的代码规范设计,但就是有点繁琐。有没有更方便的方式来处理这个混淆配置呢?
其实我们可以在写一个hvigorfilew插件来自动生成混淆配置文件。我们自定义一个HvigorPlugin任务,通过OhosHapContext对象读取module.json5文件中的routerMap字段,可以获取系统路由表的名称,再读取profile目录下的路由表。解析json文件内存,并将页面路径写到一个混淆文件中,这样每次编译时,自动生成防混淆文件,我们只需要引入这个文件就可以了。示例如下
import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { HvigorPlugin, HvigorNode, FileUtil } from '@ohos/hvigor'
function parseRouterMap(): HvigorPlugin {
return {
pluginId: 'parseRouterMap',
apply(node: HvigorNode) {
const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
const moduleJson = hapCtx.getModuleJsonOpt()
const routerMapName = moduleJson['module']['routerMap'].split(':')[1]
const dir = hapCtx.getModulePath()
const srcFile = FileUtil.pathResolve(dir, 'src', 'main', 'resources', 'base', 'profile', `${routerMapName}.json`)
const json = FileUtil.readJson5(srcFile)
const routerRuleFile = FileUtil.pathResolve(dir, 'obfuscation-router.txt')
FileUtil.ensureFileSync(routerRuleFile)
const routerMapArray = json['routerMap']
let rules = '-keep-file-name\n'
for (const element of routerMapArray) {
const pageSourceFile = element['pageSourceFile']
const path = pageSourceFile.substring(0, pageSourceFile.lastIndexOf('.'))
rules += `${path}\n`
}
FileUtil.writeFileSync(routerRuleFile, rules)
}
}
}
export default {
system: hapTasks,
plugins:[parseRouterMap()]
}
编译后会在entry目录下生成obfuscation-router.txt防混淆文件,只要引入这个文件就可以了。
使用hvigorfile插件动态生成navigation页面枚举名称
我们在我们navigation的push跳转到新页面时,都得提前定义好系统路由表中的页面name,因为使用的name与系统路由表中定义的name不相同时,跳转页面则会白屏。有了前面的经验,其它我们也可以动态生成一个ets文件,将系统路由表中的页面名称自动生成一个枚举,这样就不用每次配置系统路由表,还是复制一下名称了。例如我们的系统路由表是这样的
{
"routerMap": [
{
"name": "dialog",
"pageSourceFile": "src/main/ets/pages/dialog/DialogPage.ets",
"buildFunction": "dialogBuilder"
},
{
"name": "web",
"pageSourceFile": "src/main/ets/pages/web/WebPage.ets",
"buildFunction": "webBuilder"
},
{
"name": "login",
"pageSourceFile": "src/main/ets/pages/login/LoginPage.ets",
"buildFunction": "loginBuilder"
}
]
}
我们现在实现一个hvigorfile插件,来解析系统路由表中的name字段,并生成对应的枚举值。示例如下
import { hapTasks, OhosHapContext, OhosPluginId } from '@ohos/hvigor-ohos-plugin'
import { HvigorPlugin, HvigorNode, FileUtil } from '@ohos/hvigor'
function parseRouterMap(): HvigorPlugin {
return {
pluginId: 'parseRouterMap',
apply(node: HvigorNode) {
const hapCtx = node.getContext(OhosPluginId.OHOS_HAP_PLUGIN) as OhosHapContext
const moduleJson = hapCtx.getModuleJsonOpt()
const routerMapName = moduleJson['module']['routerMap'].split(':')[1]
const dir = hapCtx.getModulePath()
const srcFile = FileUtil.pathResolve(dir, 'src', 'main', 'resources', 'base', 'profile', `${routerMapName}.json`)
const json = FileUtil.readJson5(srcFile)
const routerMapFile = FileUtil.pathResolve(dir, 'src', 'main', 'ets', 'Pages.ets')
FileUtil.ensureFileSync(routerMapFile)
const routerMapArray = json['routerMap']
let ss = ''
for (const element of routerMapArray) {
const name = element['name']
ss += ` ${name} = '${name}',\n`
}
ss = `export enum Pages {\n${ss}}`
FileUtil.writeFileSync(routerMapFile, ss)
}
}
}
export default {
system: hapTasks,
plugins:[parseRouterMap()]
}
我们在ets目录下生成了一个Pages.ets文件,并将所有navigation页面生成对应的枚举值,页面跳转时,使用这些枚举值就不怕出错了。Pages.ets内容如下
export enum Pages {
dialog = 'dialog',
web = 'web',
login = 'login',
}
相关推荐
综上所述,华为鸿蒙端脚手架是一款专为HarmonyOS开发而设计的强大工具。它不仅提高了开发效率,还极大地简化了学习鸿蒙开发的难度。通过自动化和模板化的方式,鸿蒙脚手架让开发者能够将更多精力投入到业务逻辑的...
ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合问题
在本项目中,我们主要关注的是基于HarmonyOS 4构建的一款刷题应用程序的源代码。...同时,它也是一个很好的学习案例,可以帮助开发者快速上手HarmonyOS应用的开发,提高编程技能,适应鸿蒙生态的开发环境。
一款轻量级的动态路由框架,基于鸿蒙Navigation系统路由表和Hvigor插件实现的方案,可以解决多个业务模块(HAR/HSP)之间解耦和通信问题,从而实现业务复用和功能扩展。 Main Function Points 对Navigation简化使用...
基于HarmonyOS 4开发的一款新闻类的鸿蒙APP源代码,代码完整下载即用。 基于HarmonyOS 4开发的一款新闻类的鸿蒙APP源代码,代码完整下载即用。基于HarmonyOS 4开发的一款新闻类的鸿蒙APP源代码,代码完整下载即用...
华为鸿蒙HarmonyOS开发整理资料汇总,共38份。 1学前必读:HarmonyOS学习资源主题分享 2学前必读:OpenHarmony-联盟生态资料合集 3-1.HarmonyOS概述:技术特性 3-2.HarmonyOS概述:开发工具与平台 3-3.HarmonyOS...
鸿蒙HarmonyOS开发者资料大全鸿蒙系统开发资料汇总,包括如下: DevEco Studio 1.0 使用指南.pdf HarmonyOS-NFC开发指南.pdf HarmonyOS应用开发之页面开发.pdf HarmonyOS开发必备基础知识.pdf WLAN开发指南.pdf 图像...
HarmonyOS鸿蒙操作系统引入了一种新的编程语言——ArkTS,它是专门为HarmonyOS设计的,旨在提高开发效率和跨平台兼容性。 ArkTS是TypeScript的方言,它结合了JavaScript的灵活性和静态类型的强安全性,使得开发人员...
ZRouter是基于鸿蒙Navigation系统路由表和Hvigor插件实现的动态路由方案,以解决模块间的耦合与通信问题
HarmonyOS开发文档(二); HarmonyOS开发文档(一); HarmonyOS入门文档; HarmonyOS设备应用开发文档; HarmonyOS应用设计文档; HarmonyOS智慧屏设计文档; HarmonyOS智能穿戴应用设计文档; Huawei DevEco ...
作为鸿蒙学堂精心整理的《HarmonyOS开发文档(二)》,本篇深度学习资料为致力于鸿蒙系统开发的开发者们提供了一扇通往高效、多元媒体处理之门。 HarmonyOS的研发初衷在于打破平台之间的界限,实现无缝跨设备的用户...
基于HarmonyOS 4开发的一款刷题的鸿蒙APP源代码 (大作业).zip,含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业...
HarmonyOS开发从入门到实践 掌握这些资源就够了
【鸿蒙简单页面demo.zip】是一个包含华为鸿蒙系统(HarmonyOS)开发示例的压缩包,名为"MyApplication-master"。这个项目很可能是为了帮助开发者理解和实践在鸿蒙操作系统上构建基本用户界面的步骤。鸿蒙系统是华为...
ArkTS 是一种专为鸿蒙 HarmonyOS 开发的应用程序编程语言,它基于 JavaScript 和 TypeScript 的语法特点,融合了面向对象编程和函数式编程的优点,使得开发者能够更加高效地开发应用。 - **核心概念**:理解 ArkTS ...
基于HarmonyOS 4开发的一款新闻类的鸿蒙APP源代码 (高分项目).zip在 HarmonyOS 4 开发平台下,构建一款新闻类应用是一项综合性的任务,涉及到操作系统、UI 设计、网络通信、数据处理等多个领域的技术知识。...
02.3 HarmonyOS设备开发平台介绍 02.4 分布式应用开发实例演示 02.5 第2期答疑环节 03.1 致软件工程师的灵魂拷问 03.2 重新定位_人_设备_场景的关系 03.3 应用开发者面临的挑战 03.4 DevEco_Studio提供分布式多设备...
基于HarmonyOS 4开发一款刷题的鸿蒙APP项目源代码基于HarmonyOS 4开发一款刷题的鸿蒙APP项目源代码基于HarmonyOS 4开发一款刷题的鸿蒙APP项目源代码基于HarmonyOS 4开发一款刷题的鸿蒙APP项目源代码基于HarmonyOS 4...
【鸿蒙移动端开发代办小工具demo项目代码】是一个基于HarmonyOS操作系统开发的应用示例,主要展示了如何在HarmonyOS平台上构建一个简单的待办事项管理工具。这个项目代码旨在帮助开发者快速理解和掌握鸿蒙系统应用的...