1# 在build-profile.json5中配置arkOptions 2<!--Kit: ArkTS--> 3<!--Subsystem: ArkCompiler--> 4<!--Owner: @zju-wyx--> 5<!--Designer: @xiao-peiyang; @liyancheng--> 6<!--Tester: @kirl75; @zsw_zhushiwei--> 7<!--Adviser: @foryourself--> 8 9## 概述 10 11arkOptions主要提供ArkTS编译相关配置,当前文档介绍arkOptions中types配置类型、maxFlowDepth配置控制流分析最大栈深度等,arkOptions中的其他配置项请参考[build-profile.json5](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-configuration-file-overview)。 12 13## types 14 15### types配置文件标签说明 16 17 arkOptions的types字段配置文件标签说明: 18 19| 属性名称 | 含义 | 配置范围 | 数据类型 | 是否可缺省 | 20| -------- | -------- | -------- | -------- | -------- | 21| types | 通过types字段将指定的类型声明文件作为全局引入,从而避免在每个源码文件中单独引入。 | 模块级 | 数组 | 该标签可缺省,缺省值为空。 | 22 23### arkOptions中的types字段配置说明 24 25arkOptions中types字段示例: 26 27在模块build-profile.json5配置文件buildOption标签的arkOptions属性中添加types字段。 28```json 29// 在/entry/build-profile.json5 30{ 31 "arkOptions": { 32 "types": ["chai", "./oh_modules/@types/mocha", "./src/main/ets/pages/global"] 33 } 34} 35``` 36 37types字段支持填写包名、包所在位置的相对路径以及声明文件所在相对路径,仅支持当前模块内的查找,若目录下存在同名文件(后缀不同),默认加载顺序.d.ets > .d.ts。<br /> 38(1)填写包名方式:通过包名到oh_modules/@types/目录查找包名中定义的声明文件,如"chai"。<br /> 39(2)填写包所在相对路径方式:支持在基于build-profile.json5的相对路径中查找定义的声明文件,如"./oh_modules/@types/mocha"。<br /> 40(3)填写声明文件所在相对路径方式:支持查找相对路径下的声明文件,如"./src/main/ets/pages/global"。 41 42### 注意事项 43 44如果在types字段中填写包名或者包所在位置的相对路径,需要在工程文件/entry/oh-package.json5中dependencies作如下配置: 45```json 46"dependencies": { 47 "@types/chai": "latest", 48 "@types/mocha": "latest" 49} 50``` 51 52如果在types字段中填写声明文件所在相对路径,前提是在模块下存在相应的声明文件,比如模块下存在src/main/ets/pages/global.d.ts声明文件,声明文件内容如下所示: 53```typescript 54declare namespace Global { 55 type ObjectType = string | number; 56} 57``` 58 59通过types全局引入后,对全局类型的使用示例如下: 60```typescript 61// 在entry/src/main/ets/pages/Index.ets 62let a: Chai.Message; 63let b: Mocha.HookFunction; 64let c: Global.ObjectType; 65``` 66 67## maxFlowDepth 68 69### maxFlowDepth配置文件标签说明 70 71 arkOptions下tscConfig中maxFlowDepth字段配置文件标签说明: 72 73| 属性名称 | 含义 | 配置范围 | 数据类型 | 是否可缺省 | 74| -------- | -------- | -------- | -------- | -------- | 75| maxFlowDepth | 开发者通过maxFlowDepth字段自定义配置tsc编译过程中的tsc控制流分析最大栈,避免固定最大栈导致编译报栈问题。该配置项可配置的最小值为2000,可配置最大值为65535。 | 工程级 | 数字型 | 该标签可缺省,缺省值时使用tsc控制流分析最大栈默认值2000。 | 76 77### arkOptions下的tscConfig中maxFlowDepth字段配置说明 78 79arkOptions/tscConfig中maxFlowDepth字段展示。 80在工程级目录下的build-profile.json5配置文件buildOption标签的arkOptions/tscConfig属性中添加maxFlowDepth字段。 81 82```typescript 83// 在工程名/build-profile.json5文件中 84{ 85 "arkOptions": { 86 "tscConfig": { 87 "maxFlowDepth": 2222 88 } 89 } 90} 91``` 92 93### 注意事项 94 95- 仅可在工程级目录下build-profile.json5文件中配置maxFlowDepth字段。 96- 若开发者未对maxFlowDepth字段进行配置时,则该字段默认为2000;若开发者对maxFlowDepth字段配置的值超过可配置范围,则会出现编译构建相关报错。 97 98 ```txt 99 hvigor ERROR: Schema validate failed. 100 Detail: Please check the following fields. 101 { 102 instancePath: 'app.products[0].buildOption.arkOptions.tscConfig.maxFlowDepth', 103 keyword: 'maximum', 104 params: { comparision: '<=', limit: 65535 }, 105 message: 'must be <= 65535', 106 location: 'D:/工程名/build-profile.json5:行号:列号' 107 } 108 ``` 109 110- 如果代码中函数或者模块过长导致控制流分析深度大于或者等于该字段所配置/默认的值,则会终止控制流分析并且报错:The containing function or module body is too large for control flow analysis. 111 112## transformLib 113 114### transformLib配置文件标签说明 115 116arkOptions的transformLib字段配置文件标签说明: 117 118| 属性名称 | 含义 | 配置范围 | 数据类型 | 是否可缺省 | 119| -------- | -------- | -------- | -------- | -------- | 120| transformLib | 字节码插桩插件配置,允许开发者在编译时对字节码进行插桩修改。仅支持Stage模型,格式为相对路径,指向实现插桩功能的动态库。不同系统要求的动态库文件类型如下,动态库文件内容需要在对应平台生成,不能拷贝修改后缀名混用。| 模块级 | 字符串型 | 该标签可缺省,缺省值时代表不使用该功能。 | 121 122### arkOptions中的transformLib字段配置说明 123 124arkOptions中transformLib字段示例: 125 126在模块build-profile.json5配置文件buildOption标签的arkOptions属性中添加transformLib字段。 127```json 128// 在/entry/build-profile.json5 129{ 130 "buildOption": { 131 "arkOptions": { 132 "transformLib": "./dll/example.dll" 133 } 134 } 135} 136 137``` 138修改方舟字节码能力可参考[编译期自定义修改方舟字节码](customize-bytecode-during-compilation.md)。 139 140### 注意事项 141 142- 若开发者未对字段进行配置时,则默认不使用该功能。 143- HAP、HSP模块配置即生效,HAR模块仅字节码HAR配置生效,非字节码HAR配置不生效。 144- 文件格式要求:Windows:.dll文件,Linux/Mac:.so文件。