HarmonyOS鸿蒙Next中如何实现一个hvigor插件

HarmonyOS鸿蒙Next中如何实现一个hvigor插件 hvigor插件,它可以自动化执行了某些特定的任务,减少了我们的手动干预,确保了构建过程的一致可靠性,可以说,在实际的开发中,极大的提高了我们的开发效率,那么如何实现一个hvigor插件呢?今天,我们就一起来实现一下。

3 回复

目前有两种方式实现hvigor插件,一种是基于hvigorfile脚本,另一种是基于基于typescript项目;两者有着一定的区别,hvigorfile脚本形式,直接写到项目中即可,便于我们针对脚本的更改,而typescript项目则需要发布后才能使用,如果你想开发后的插件,让更多的项目或更多的开发者使用,推荐typescript项目形式,就比如上篇文章的组件化运行插件,使用者只需简单的配置即可使用,如果仅仅是单一的项目使用,而且想便捷使用,那么推荐使用hvigorfile脚本。

两者主要区别如下:

cke_766.png

基于hvigorfile脚本开发

这种开发方式,直接在工程的hvigorfile.ts文件或者模块下的hvigorfile.ts文件,编辑开发,可以说,非常的便捷,无须其他的额外配置,但是也有潜在的不足之处,那就是不便于在多个项目进行插件复用。

总体来说,实现起来非常的简单,仅仅需要三步,我们就可以实现。

第一步:导入接口

import { HvigorPlugin, HvigorNode } from '@ohos/hvigor';

第二步:实现自定义插件

function myPlugin(): HvigorPlugin {
  return {
    pluginId: 'myPlugin',
    apply(node: HvigorNode) {
      // 插件主体
      console.log('我是一个简单的插件');
    }
  }
}

第三步:使用插件

export default {
  system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
  plugins: [
    myPlugin()
  ]
}

完整代码

import { appTasks } from '@ohos/hvigor-ohos-plugin';
import { HvigorPlugin, HvigorNode } from '@ohos/hvigor';

export default {
  system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */
  plugins: [
    myPlugin()
  ]
}


function myPlugin(): HvigorPlugin {
  return {
    pluginId: 'myPlugin',
    apply(node: HvigorNode) {
      // 插件主体
      console.log('我是一个简单的插件');
    }
  }
}

以上的步骤完成之后,在我们编译或者运行模块的时候,就会先去执行我们的插件主体:

cke_5899.png

比如这里,我们可以做很多的动作,如代码检查,配置检查,规范检查等等,你可以实现任何想要在构建之前要做的事情。

基于typescript项目开发

基于hvigorfile脚本开发方式虽然很方便,但是不易进行拓展,如果你想让更多的项目或者开发者快捷使用,那么还是得typescript项目开发。

第一步:初始化typescript项目

安装typescript模块

// 全局安装TypeScript
npm install typescript -g

新建目录,在此目录,初始化npm项目

npm init

在执行npm init的时候,会有很多步骤,我们可以直接使用默认的,按回车即可,这些信息,我们在生成后也可以单独秀气。

cke_10793.png

以上的命令执行完成之后,在新建的目录中就会创建一个package.json文件,这个就是命令中的那些信息:

cke_14121.png

生成typescript配置文件

// 初始化typeScript配置文件
tsc --init

生成信息如下:

cke_17726.png

第二步:开发插件

第一步完成之后,我们就可以进行插件开发了,首先配置npm镜像仓库地址,我们可以在用户目录下创建或打开.npmrc文件,配置如下信息:

registry=https://repo.huaweicloud.com/repository/npm/
@ohos:registry=https://repo.harmonyos.com/npm/

以上的信息配置完成之后,打开第一步生成的package.json文件,在devDependencies配置如下信息:

"devDependencies": {
  "@ohos/hvigor": "5.2.2"
}

配置好之后,执行如下命令,进行资源包下载:

npm install

执行完上述的命令后,我们可以新建自己的ts文件用于插件代码编写,写法呢,和基于hvigorfile脚本开发方式基本一致。

import { HvigorNode, HvigorPlugin } from '@ohos/hvigor';


export function myPlugin(): HvigorPlugin {
  return {
    pluginId: 'myPlugin',
    apply(node: HvigorNode) {
       console.log('我是一个简单的插件');
    }
  }
}

插件完成之后,然后在创建index.ts文件,并在该文件中声明插件方法的导出,如下代码

export { myPlugin } from './src/plugin/my-plugin';

第三步:发布插件

开发好的插件,如何让他人进行使用,那么就需要发布到npm平台,其发布方式,也是遵循npm发布规范,这里也简单总结一下,首先配置pm镜像仓库地址,在用户目录下创建.npmrc文件,配置您需要发布的镜像仓库。

registry=[npm镜像仓库地址]

配置pm镜像仓库地址完成之后,进行登录npm,执行如下命令,如果没有账号,还请到npm官方去注册。

npm login

登录完成之后,就可以进行发布了,执行如下命令,就可以将npm项目打包并发布至镜像仓库。

npm publish

第四步:插件使用

插件使用就很简单了,上篇文章中已经有过概述,大家可以查看上篇文章即可。

相关总结

需要说明的是,这两种方式的实现核心逻辑基本上是一致的,都是以ts文件编写Task任务方法,主要区别就是在插件复用机制上,如果单一项目,推荐基于hvigorfile脚本开发方式,如果是共享给他人使用,推荐使用基于typescript项目开发。

更多关于HarmonyOS鸿蒙Next中如何实现一个hvigor插件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,创建hvigor插件需使用ArkTS/TypeScript。插件是一个独立的npm包,包含hvigorfile.ts作为入口,通过@ohos/hvigor提供的API定义任务。主要步骤:初始化npm项目,编写插件逻辑,在hvigor-config.json5中配置插件路径,最后在模块的hvigorfile.ts中应用。

在HarmonyOS Next中,实现hvigor插件主要涉及以下步骤:

  1. 创建插件模块:在项目中新建一个模块,类型选择Plugin。该模块的build-profile.json5中会包含"type": "plugin"的声明。

  2. 定义插件入口:在插件模块的src/main/ets目录下,创建插件的主类。这个类需要实现ohos.hvigor.Plugin接口,并重写其apply方法。apply方法会在插件被应用时调用,是插件逻辑的入口点。

  3. 编写插件逻辑:在apply方法中,你可以通过传入的Project对象来访问和配置项目。常见的操作包括:

    • 注册任务:使用project.tasks.createproject.task来创建自定义的构建任务。
    • 配置扩展属性:使用project.extensions.create为项目添加自定义的配置块。
    • 监听构建生命周期:使用project.afterEvaluate在项目评估完成后执行操作,或使用tasks.whenTaskAdded来监听任务添加事件。
  4. 发布与引用插件

    • 本地引用:如果插件仅用于当前项目,可以在需要使用该插件的模块(如entry)的hvigorfile.ts中,通过import语句导入你的插件类,并在ohos配置块中调用applyPlugin方法应用它。
    • 发布到仓库:若想复用,可将插件模块打包发布到Maven仓库。其他项目则需要在根目录的hvigorfile.ts中配置该仓库地址,并在模块级的hvigorfile.ts中通过dependencies添加插件依赖,然后同样使用applyPlugin来应用。

一个简单的示例代码结构如下:

// 插件主类:src/main/ets/MyPlugin.ets
import { Plugin, Project } from '@ohos/hvigor'

export default class MyPlugin implements Plugin {
  apply(project: Project): void {
    // 1. 创建一个简单任务
    project.tasks.create('myTask', (task) => {
      task.doLast(() => {
        console.log('Hello from MyPlugin!')
      })
    })

    // 2. 在项目评估后进行操作
    project.afterEvaluate(() => {
      console.log('Project evaluation is complete.')
    })
  }
}
// 使用插件的模块的 hvigorfile.ts
import MyPlugin from '../plugin-module/src/main/ets/MyPlugin'

export { ohos } from '@ohos/hvigor-ohos-plugin'

ohos.applyPlugin(MyPlugin)

核心要点:

  • hvigor插件基于Node.js环境,使用TypeScript进行开发。
  • 插件通过操作ProjectTask等API来扩展构建流程。
  • 充分理解hvigor的构建生命周期(初始化、配置、执行)有助于在正确的时机插入插件逻辑。

通过以上步骤,你可以创建出用于代码检查、资源处理、自动化部署等功能的定制化插件,从而提升HarmonyOS应用的开发效率。

回到顶部