Hivgor脚本文件

在构建的生命周期中Hvigor使用两个脚本文件来完成插件、任务以及生命周期hook的注册:

  • hvigorconfig.ts:此文件在整个项目中只有根目录下存在一份,不是构建必须的文件并且默认不存在,如有需要可自行创建,此文件被解析执行的时间较早,可用于在Hvigor生命周期刚开始时操作某些数据。
  • hvigorfile.ts:此文件在每个node下都有一份,是构建的必须文件,在此文件中可以注册插件、任务以及生命周期hook等操作。

任务与任务依赖图

Hvigor是基于任务对您的项目进行自动化构建的,任务(Task)是Hvigor构建过程中的基本工作单元,它定义了构建项目时需要执行的具体工作。任务可以完成多种操作,比如源码编译任务,打包任务或签名任务等。每一种任务的执行逻辑由插件(plugin)提供,插件可以是由hvigor-ohos-plugin提供的默认任务逻辑,也可由您个性化定制。

需要注意的一点是,任务是存在依赖关系的,Hvigor在执行任何任务之前会构建任务依赖图,所有任务会形成一个有向无环图(DAG),如下示例图,任务之间的依赖关系用箭头进行表示:



hvigor插件(hvigor-ohos-plugin)和hvigorfile.ts文件中的构建脚本都将通过任务依赖机制对任务依赖图做出影响。

hvigor-ohos-plugin

hvigor-ohos-plugin是默认的构建插件,为任务(Task)的完成提供业务逻辑支持,比如为Hvigor提供Hap、Har和Hsp打包服务等任务,每一种任务的具体执行逻辑由本模块中不同的插件来提供。

Hvigor与hvigor-ohos-plugin的关系

概述部分提到了Hvigor提供任务注册编排以及配置管理等任务管理机制,它负责控制任务的执行流程,但是并不包含每一个任务的具体业务逻辑,具体逻辑是由hvigor-ohos-plugin提供的。

Hvigor和hvigor-ohos-plugin的关系可以通过下图来说明,Hvigor接受任务的注册并编排任务执行顺序,并按照顺序依次调用hvigor-ohos-plugin中的插件来执行任务。如果您定制了自己的任务逻辑插件并将其注册,hvigor-ohos-plugin也会调用您的个性化插件来完成编译构建流程。

在Hvigor执行构建的过程中,hvigor-ohos-plugin会向Hvigor进行任务的注册,Hvigor会根据构建的任务执行有向图依次调用对应的插件来执行相应任务,在完成编译、打包、签名等一系列任务后,Hvigor也就正式完成了构建。

Hvigor生命周期

生命周期展示了Hvigor编译构建系统如何进行一次完整的编译构建流程。Hvigor的编译构建过程有三个不同的阶段,分为初始化、配置和执行,Hvigor会按顺序运行这些阶段。

  • 初始化:此阶段主要目的为初始化项目的编译参数,构造出项目结构的树形数据模型,每个node为一个HvigorNode对象。
  • 配置:此阶段开始时,所有的node都已经加载完毕,但每个node中还没有加载插件(plugin)、任务(task)和DAG图,此阶段的主要目的就是加载出这些内容。
  • 执行:任务之间的依赖关系决定了任务执行顺序,任务可以并行执行

生命周期及hook点

在Hvigor的生命周期中,以下多个hook点可供您使用,便于您在对应的时机调用某些逻辑。在下图中所有绿色标记的线框为可以使用的hook点

鸿蒙hvigor构建任务依赖与生命周期简介的更多相关文章

  1. Android之Activity生命周期简介

    概述 有图有真相,所以先上图: 上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合 ...

  2. vue生命周期简介

    vue生命周期简介 生命周期的钩子 LifeCycle hooks 上面已经能够清晰的看到vue2.0都包含了哪些生命周期的钩子函数~~ 那么 执行顺序以及什么时候执行,我们上代码来看~~~ 生命周期 ...

  3. Vue生命周期简介和钩子函数

    钩子就好像是把人的出生到死亡分成一个个阶段,你肯定是在出生阶段起名字,而不会在成年或者死亡的阶段去起名字.或者说你想在出生阶段去约炮,也是不行的.组件也是一样,每个阶段它的内部构造是不一样的.所以一般 ...

  4. (二)Maven 基本概念——依赖、生命周期、仓库管理、聚合&继承

    1. 依赖配置 1.1 依赖配置主要包含如下元素: <!--添加依赖配置--> <dependencies> <!--项目要使用到junit的jar包,所以在这里添加ju ...

  5. React组件和生命周期简介

        React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...

  6. Docker安装,基本概念,执行流程,生命周期简介

    Docker基本概念 在使用Docker前,首先要先知道Docker中这几个常用的概念: 镜像:镜像是文件,只读的,提供了运行完整软硬件应用程序的集装箱. 容器:是镜像的实例,由Docker负责创建, ...

  7. ASP.NET 生命周期 简介

    当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端(IIS)发送一个request请求,服务器就会判断发送过来的请求页面,  完全识别 HTTP 页面处理程序类后,ASP.NET 运行时 ...

  8. React 生命周期简介

       React 中组件的生命周期会经历如下三个过程:装载过程.更新过程.卸载过程. 装载过程:组件实例被创建和插入 DOM 树的过程: 更新过程:组件被重新渲染的过程: 卸载过程:组件从 DOM 树 ...

  9. 介绍maven构建的生命周期

    介绍maven构建的生命周期 这篇是 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html 的 ...

  10. Java-Maven-Runoob:Maven构建生命周期

    ylbtech-Java-Maven-Runoob:Maven构建生命周期 1.返回顶部 1. Maven 构建生命周期 Maven 构建生命周期定义了一个项目构建跟发布的过程. 一个典型的 Mave ...

随机推荐

  1. 学习设计微服务:api认证

    前言最近再学习微服务,所以把自己的个人站点https://www.ttblog.site/拆分成微服务.目前正在思考微服务里面的认证与授权,网上百度到都是根据用户名和密码来实现的,考虑到实际的原因,我 ...

  2. 在 macOS 上安装 fish

    安装 fish brew install zsh 将默认 shell 切换为 fish 由于 Homebrew 安装的 fish 不在标准 shell 列表 /etc/shell 里,因此要先将 fi ...

  3. Go 必知必会:探索 Go 语言中的数组和切片深入理解顺序集合

    文末有面经共享群 在 Go 语言的丰富数据类型中,数组和切片是处理有序数据集合的强大工具,它们允许开发者以连续的内存块来存储和管理相同类型的多个元素.无论是在处理大量数据时的性能优化,还是在实现算法时 ...

  4. Linux下载安装jdk1.8

    Linux下载安装jdk1.8 一.下载 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=a ...

  5. 如何在 Web 前端做 3D 音效处理

    ​ 一.背景 在社交元宇宙.大逃杀等类型的游戏场景下,用户在通过简单语音交流外,结合场景也需要一些立体声效果来让用户感知游戏角色周围其他用户的存在及其对应的距离和方位,提高语音互动的趣味性. 为了满足 ...

  6. RxJS 系列 – Observable & Creation Operators

    前言 RxJS 最大篇幅就是一堆的 operators, 但是那些概念并不多, 只要常用就能熟能生巧了. Observable 和 Subject 反而需要我们了解清楚. 所以这篇我们先来了解这 2 ...

  7. 数据库MySQL-安装、卸载、配置、登录、退出

    一.下载 下载链接:MySQL :: Download MySQL Community Server (Archived Versions) 二.安装(解压)  三.配置 1.添加环境变量 我的电脑- ...

  8. 系统编程-操作系统概论PART1

    Part1. 计算机的基本组成原理 Part2. 计算机执行原理顶层视图 Part3. 指令 指令周期 取指令和执行指令 指令格式 前面1字节是操作码,代码指令的功能,例如加法功能. 后面3字节用于寻 ...

  9. 10款好用的开源 HarmonyOS 工具库

    大家好,我是 V 哥,今天给大家分享10款好用的 HarmonyOS的工具库,在开发鸿蒙应用时可以用下,好用的工具可以简化代码,让你写出优雅的应用来.废话不多说,马上开整. 1. efTool efT ...

  10. Linux_动态库与静态库(其一)

    1.动态库和静态库的定义 动态库(.so):动态库是编译后不嵌入目标文件中的共享库,在程序运行的时候才去链接动态库的代码,可以被多个程序共享使用,通常以 .so 结尾. 静态库(.a):静态库是将一组 ...