# 能力说明

Hvigor支持在hvigorfile.ts里接收部分编译配置，以实现动态配置构建配置、并使能到构建的过程与结果中。

此能力现有两种方式实现：

*   以hvigor hook能力为基础通过插件上下文来动态配置。(推荐使用)
*   在hvigorfile.ts中通过overrides关键字导出动态配置。(不推荐使用)

#### 通过hook以及插件上下文实现动态配置

Hvigor支持stage模型在hvigor hook中操作从硬盘上读取的以下配置文件：

*   每个hvigorNode中的build-profile.json5
*   module.json5
*   app.json5
*   每个module下的oh-package.json5文件中的dependency、devDependency、dynamicDependency以及version。

目前可以通过hvigor对象提供的上下文直接获取和修改配置以实现动态配置构建配置、并使能到构建的过程与结果中。

在hvigorfile.ts或hvigorconfig.ts文件中，可以使用Hvigor提供的API接口来实现此能力。

相比于下面的overrides的能力来说，通过hook以及插件上下文来动态修改签名和编译配置更为灵活和易于理解，功能也更为全面，推荐采用此种方式。具体使用方式请参考通过hook以及插件上下文动态配置构建配置(推荐使用)。

#### 在hvigorfile.ts中通过overrides关键字导出动态配置

在hvigorfile.ts中，我们约定在导出的对象中的config.ohos属性里接收编译的配置：

```
export default {  
    system: hapTasks,  
    config: {  
        ohos: {
            ...
        }    
    }
}
```

目前可以在工程级的hvigorfile.ts的config.ohos中配置的字段：

*   overrides：定义需要覆盖的字段，会在构建过程中覆盖原有的对应配置项。
    *   signingConfig：签名配置，对应build-profile.json5里的signingConfigs配置项。
        *   type
        *   material
            *   certpath
            *   storePassword
            *   keyAlias
            *   keyPassword
            *   profile
            *   signAlg
            *   storeFile
    *   appOpt：对应app.json5里的配置项字段。
        *   bundleName
        *   bundleType
        *   icon
        *   label
        *   vendor
        *   versionCode
        *   versionName

目前可以在模块级的hvigorfile.ts的config.ohos中配置的字段：

*   overrides：定义需要覆盖的字段，会在构建过程中覆盖原有的对应配置项。
    *   buildOption：对应build-profile.json5里的buildOption配置项。
        *   arkOptions
        *   externalNativeOptions
        *   napiLibFilterOption
        *   nativeLib
        *   resOptions
        *   sourceOption

配置在overrides项中的参数，其优先级会高于在配置项中的对应字段。