Harmony开发工具(2)——Hvigor
概述
- 基于TS实现的构建任务编排工具
- 主要提供任务管理机制,基于任务对项目进行自动化构建的
- 自动执行和管理构建流程,实现应用/服务构建任务流的执行,完成HAP/APP的构建打包
- 可独立于DevEco Studio运行
工程结构
- hvigor将工程解析为一个如下所示的两层树形结构,项目为根,模块为叶,都称为Node
flowchart LR A[Project] --> B[Module_A] A--> C[Module_B] A --> D[Module_C]
-
最开始的初始化阶段,通过hvigorconfig.ts及工程级build-profile.json5文件(均可以配置多模块)中的配置构造出一个树形结构存储项目工程结构
-
配置文件说明
- hvigor-config.json5文件,以指定hvigor的版本、构建依赖以及构建行为的配置参数
- build-profile.json5文件分为工程级与模块级,其中buildOption在工程级文件和模块级文件均可配置(相同字段以模块级的字段为准,不同字段模块级会继承工程级)
注册生命周期中的插件、任务、hook
脚本 | 作用 |
---|---|
hvigorfile.ts | 1. 每个node下都有一份,是构建必须文件 2. 可在其中注册插件、任务以及生命周期hook等操作 |
hvigorconfig.ts | 1. 整个项目中仅根目录中存在一份 2. 不是构建必须的文件且默认不存在,可自行创建 3. 被解析执行的时间较早,可在hvigor生命周期刚开始时操作某些数据。 |
任务
特点
- 是hvigor构建过程中的基本工作单元
- 定义了构建项目时需要执行的具体工作
- 每种任务执行逻辑由插件提供,插件可由hvigor-ohos-plugin默认提供,也可自己定制
- 任务间存在依赖关系,形成一个有向无环图
任务类型
任务类型 | 说明 |
---|---|
ArkTS | ArkTS编译 |
JS | JS编译 |
Resource | 资源处理 |
Package | 打包 |
Sign | 签名 |
Verification | 验证项目/依赖项 |
Generate | 生成、转换配置文件 |
Hook | hook |
Config | 处理配置文件相关 |
Native | Native编译任务 |
Help | 查询帮助信息的任务 |
Other | 未分类任务 |
构建插件hvigor-ohos-plugin
- hvigor控制任务的执行流程,但具体业务逻辑由hvigor-ohos-plugin提供
- hvigor接受任务的注册并编排任务执行顺序,并按照顺序依次调用hvigor-ohos-plugin中的插件来执行任务
- hvigor-ohos-plugin向hvigor注册任务->hvigor根据有向图依次调用对应的插件执行->完成编译、打包、签名等一系列任务->完成构建
Hvigor生命周期
初始化->配置->执行
生命周期 | 任务 | 过程 |
---|---|---|
初始化 | 初始化项目的编译参数 构造出项目结构的树形数据模型(每个Node为HvigorNode对象) |
- 根据命令参数和hvigor-config.json5文件设置hvigor的构建参数
- 构造hvigor、hvigorConfig对象
- 由根目录build-profile.json5创建rootNodeDescriptor实例
- 通过其中的modules字段初始化工程中所有模块的NodeDescriptor对象实例
- 执行根目录hvigorconfig.ts,在其中通过hvigor相关API为生命周期注册hook或在构建开始时进行其他处理
- 根据节点描述对象构造各节点HvigorNode对象实例
配置 | 此时node都已经加载完毕,还需加载插件、任务和DAG图 | - 执行各node中的hvigorfile.ts文件,为node添加plugin(向hvigor注册任务)
- 执行plugin的apply方法,并添加plugin的上下文
执行 | 执行选定的任务 | 依赖关系决定了任务执行顺序
任务可以并行执行
Hook
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kaiyu's blog!
评论