1e41f4b71Sopenharmony_ci# HPM Part开发指导 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ci## HPM Part开发指导概述 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci通常情况下,[DevEco Marketplace](https://repo.harmonyos.com)中能找到您开发常用的资源,可以通过依赖将所需的资源引入工程中。若现有的资源不能完全满足,可以自己开发并将其以HPM Part的格式发布。安装好hpm-cli工具后,就可以进行Part的开发了。 7e41f4b71Sopenharmony_ci 8e41f4b71Sopenharmony_ci>  **说明:** 9e41f4b71Sopenharmony_ci> 下述操作建议在Ubuntu 18.04及以上版本运行。 10e41f4b71Sopenharmony_ci 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci## 安装HPM命令行工具 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci在进行HPM Part开发之前,首先需要安装包管理器命令行工具hpm-cli。Hpm-cli是一个基于Node.js开发的跨平台的命令行工具,而要运行hpm命令,需要先安装Node.js,然后使用npm来安装hpm。 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci### 安装Node.js及hpm-cli 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci1. 安装Node.js。 20e41f4b71Sopenharmony_ci 从官网下载并在本地安装Node.js. 21e41f4b71Sopenharmony_ci 22e41f4b71Sopenharmony_ci 推荐安装[Node.js](https://nodejs.org/)最新的LTS版本 (不低于12.x)。 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci2. 通过Node.js自带的npm安装hpm-cli命令行工具。执行以下命令: 25e41f4b71Sopenharmony_ci 26e41f4b71Sopenharmony_ci ``` 27e41f4b71Sopenharmony_ci npm install -g @ohos/hpm-cli 28e41f4b71Sopenharmony_ci ``` 29e41f4b71Sopenharmony_ci 30e41f4b71Sopenharmony_ci3. 安装完成后执行如下命令,显示hpm版本,即安装成功。 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci ``` 33e41f4b71Sopenharmony_ci hpm -V 或 hpm --version 34e41f4b71Sopenharmony_ci ``` 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci4. (可选)如果需要升级hpm版本,请执行如下命令: 37e41f4b71Sopenharmony_ci 38e41f4b71Sopenharmony_ci ``` 39e41f4b71Sopenharmony_ci npm update -g @ohos/hpm-cli 40e41f4b71Sopenharmony_ci ``` 41e41f4b71Sopenharmony_ci 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci### 配置hpm-cli(可选) 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci安装完hpm命令行工具后,如果需要更改配置信息(如代理,shell路径),可执行以下命令可以查看hpm配置: 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci 48e41f4b71Sopenharmony_ci``` 49e41f4b71Sopenharmony_cihpm config 50e41f4b71Sopenharmony_ci``` 51e41f4b71Sopenharmony_ci 52e41f4b71Sopenharmony_ci 上述命令执行后将会显示hpm的默认配置,您可以根据自己需要对默认配置进行修改,以下是hpm的常用配置: 53e41f4b71Sopenharmony_ci 54e41f4b71Sopenharmony_ci``` 55e41f4b71Sopenharmony_ciregistry = https://hpm.harmonyos.com 56e41f4b71Sopenharmony_ci### login Settings 57e41f4b71Sopenharmony_ci# loginUser = invitation_code 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci#### Path Settings 60e41f4b71Sopenharmony_cishellPath = C:\WINDOWS\System32\cmd.exe 61e41f4b71Sopenharmony_ci# shellPath = C:\Program Files\Git\bin\sh.exe 62e41f4b71Sopenharmony_ci# globalRepo = C:\Users\username\.hpm\global 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci#### Network Settings 65e41f4b71Sopenharmony_ci# no_proxy = *.server.com 66e41f4b71Sopenharmony_ci# http_proxy = http://user:pwd@proxy_server:port 67e41f4b71Sopenharmony_ci# https_proxy = http://user:pwd@proxy_server:port 68e41f4b71Sopenharmony_ci# strictSsl = true 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci#### Other Settings 71e41f4b71Sopenharmony_ci# privateSupport = true|false 72e41f4b71Sopenharmony_ci# ignoreBundles = @ohos/llvm,@ohos/gn, 73e41f4b71Sopenharmony_ci# OSPlatform = Auto|linux|darwin|win32 74e41f4b71Sopenharmony_ci``` 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ci## 创建HPM Part 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci创建HPM Part有以下两种方式,开发者可根据自己的需要选择使用。 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci 82e41f4b71Sopenharmony_ci### 使用模板创建HPM Part 83e41f4b71Sopenharmony_ci 84e41f4b71Sopenharmony_ci1. 请执行如下命令创建目录: 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci ``` 87e41f4b71Sopenharmony_ci hpm init -t default mybundle 88e41f4b71Sopenharmony_ci ``` 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci >  **说明:** 91e41f4b71Sopenharmony_ci > -t后的default表示使用名为'default'模板创建(也可以换作其他的模板,如simple、dist等) 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci 生成目录结构如下: 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci ``` 96e41f4b71Sopenharmony_ci / 97e41f4b71Sopenharmony_ci ├── headers # 头文件(样例) 98e41f4b71Sopenharmony_ci │ └── main.h 99e41f4b71Sopenharmony_ci └── src # 源代码(样例) 100e41f4b71Sopenharmony_ci │ └─ main.c 101e41f4b71Sopenharmony_ci ├── bundle.json # 元数据声明文件 102e41f4b71Sopenharmony_ci └── LICENSE # 许可协议文本 103e41f4b71Sopenharmony_ci └── Makefile # 编译描述文件(样例) 104e41f4b71Sopenharmony_ci └── README.md # Part的自述文件 105e41f4b71Sopenharmony_ci 106e41f4b71Sopenharmony_ci ``` 107e41f4b71Sopenharmony_ci 108e41f4b71Sopenharmony_ci2. 接下来根据需要,实现Part内部的功能代码,以及编译脚本。 109e41f4b71Sopenharmony_ci 110e41f4b71Sopenharmony_ci ``` 111e41f4b71Sopenharmony_ci hpm init -t {templatename} -d {dir} {name} 112e41f4b71Sopenharmony_ci ``` 113e41f4b71Sopenharmony_ci 114e41f4b71Sopenharmony_ci >  **说明:** 115e41f4b71Sopenharmony_ci > - -t {templatename} :指的是模板名称。 116e41f4b71Sopenharmony_ci > 117e41f4b71Sopenharmony_ci > - -d {dir}:是要创建的Part所存放的路径。 118e41f4b71Sopenharmony_ci > 119e41f4b71Sopenharmony_ci > - name:为要创建的Part名称。 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_cihpm-cli除了提供了少量默认模板之外,其他模板均存储在[DevEco Marketplace](https://repo.harmonyos.com),可以使用命令hpm search -t template从[DevEco Marketplace](https://repo.harmonyos.com)搜索模板。 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci 126e41f4b71Sopenharmony_ci### 将现有工程定义为Part 127e41f4b71Sopenharmony_ci 128e41f4b71Sopenharmony_ci如果您已经有了代码工程,需要分发的hpm平台,只需要在当前工程目录下(例如mybundle2),执行如下命令,系统会引导您输入组件名称和版本等信息。 129e41f4b71Sopenharmony_ci 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci``` 132e41f4b71Sopenharmony_cihpm init 133e41f4b71Sopenharmony_ci``` 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci1. 输入名称后回车(如mybundle2)。 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci2. 接下来依次输入版本、描述等信息后,会在当前目录下会生成一个bundle.json文件。 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci3. 也可以打开bundle.json文件。 140e41f4b71Sopenharmony_ci 141e41f4b71Sopenharmony_ci ``` 142e41f4b71Sopenharmony_ci $ hpm init 143e41f4b71Sopenharmony_ci Your bundle will be created in directory ~\demo\mybundle2 144e41f4b71Sopenharmony_ci ? bundle name mybundle2 145e41f4b71Sopenharmony_ci ? version 1.0.0 146e41f4b71Sopenharmony_ci ... 147e41f4b71Sopenharmony_ci Initialization finished. 148e41f4b71Sopenharmony_ci ``` 149e41f4b71Sopenharmony_ci 150e41f4b71Sopenharmony_ci4. 打开bundle.json文件修改其他信息(如作者、代码仓库、代码目录、命令脚本、依赖组件等),如下(仅示意): 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ci ``` 153e41f4b71Sopenharmony_ci { 154e41f4b71Sopenharmony_ci "name": "mybundle2", 155e41f4b71Sopenharmony_ci "version": "1.0.0", 156e41f4b71Sopenharmony_ci "publishAs": "code-segment", 157e41f4b71Sopenharmony_ci "dirs":{ 158e41f4b71Sopenharmony_ci ".":["README.md"], 159e41f4b71Sopenharmony_ci "src":["test.c"], 160e41f4b71Sopenharmony_ci "header":["header/test.h" ], 161e41f4b71Sopenharmony_ci "src/common":["src/common/foobar.txt"] 162e41f4b71Sopenharmony_ci }, 163e41f4b71Sopenharmony_ci "scripts": { 164e41f4b71Sopenharmony_ci "build": "make -${args}" 165e41f4b71Sopenharmony_ci }, 166e41f4b71Sopenharmony_ci "dependencies": { 167e41f4b71Sopenharmony_ci "@ohos/cjson": "^1.0.0", 168e41f4b71Sopenharmony_ci "@ohos/foobar": "^1.2.0" 169e41f4b71Sopenharmony_ci } 170e41f4b71Sopenharmony_ci } 171e41f4b71Sopenharmony_ci ``` 172e41f4b71Sopenharmony_ci 173e41f4b71Sopenharmony_ci 174e41f4b71Sopenharmony_ci## 定义发行版 175e41f4b71Sopenharmony_ci 176e41f4b71Sopenharmony_ci发行版的元数据文件中定义了其依赖的Parts,以及如何编译、链接这些Parts,生成镜像文件的编译脚本。 177e41f4b71Sopenharmony_ci 178e41f4b71Sopenharmony_ci下方以bundle.json中定义为示例,以下示例的编译命令dist,采用hb编译框架描述。 179e41f4b71Sopenharmony_ci 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci``` 182e41f4b71Sopenharmony_ci{ 183e41f4b71Sopenharmony_ci "name": "@your/dist_name", 184e41f4b71Sopenharmony_ci "version": "2.2.0", 185e41f4b71Sopenharmony_ci "publishAs": "distribution", 186e41f4b71Sopenharmony_ci "description": "describe it", 187e41f4b71Sopenharmony_ci "scripts": { 188e41f4b71Sopenharmony_ci "config_hb": "hb set -root $DEP_BUNDLE_BASE", 189e41f4b71Sopenharmony_ci "dist": "PATH=/root/.local/bin:${DEP_OHOS_gn}:${DEP_OHOS_ninja}/ninja:${DEP_OHOS_llvm}/llvm/bin:${DEP_OHOS_hc_gen}/hc-gen:${PATH} && ./scripts/dist.sh" 190e41f4b71Sopenharmony_ci }, 191e41f4b71Sopenharmony_ci "envs": { 192e41f4b71Sopenharmony_ci "debug": false 193e41f4b71Sopenharmony_ci }, 194e41f4b71Sopenharmony_ci "dirs": { 195e41f4b71Sopenharmony_ci "scripts": "scripts/*" 196e41f4b71Sopenharmony_ci }, 197e41f4b71Sopenharmony_ci "dependencies": { 198e41f4b71Sopenharmony_ci "@ohos/build_lite": "2.2.0", 199e41f4b71Sopenharmony_ci "@ohos/gn": "1.1.1", 200e41f4b71Sopenharmony_ci "@ohos/llvm": "1.1.1", 201e41f4b71Sopenharmony_ci "@ohos/hc_gen": "1.1.0", 202e41f4b71Sopenharmony_ci "@ohos/ninja": "1.1.0", 203e41f4b71Sopenharmony_ci ...... 204e41f4b71Sopenharmony_ci }, 205e41f4b71Sopenharmony_ci "ohos": { 206e41f4b71Sopenharmony_ci "os": "2.2-Beta", 207e41f4b71Sopenharmony_ci "board": "hi3516", 208e41f4b71Sopenharmony_ci "kernel": "liteos-a" 209e41f4b71Sopenharmony_ci }, 210e41f4b71Sopenharmony_ci "keywords": ["hispark", "hi3516"], 211e41f4b71Sopenharmony_ci "repository": "https://gitee.com/openharmony/your-project", 212e41f4b71Sopenharmony_ci "license": "Apache V2" 213e41f4b71Sopenharmony_ci} 214e41f4b71Sopenharmony_ci``` 215e41f4b71Sopenharmony_ci 216e41f4b71Sopenharmony_ci 217e41f4b71Sopenharmony_ci## 编译构建 218e41f4b71Sopenharmony_ci 219e41f4b71Sopenharmony_ci完成代码开发后,如果Part的代码是可以独立编译的,可以配置编译工具和脚本以完成二进制的生成。 220e41f4b71Sopenharmony_ci 221e41f4b71Sopenharmony_cihpm-cli具备命令集成的能力,开发者可以选择任意的适合项目所采用的语言编译工具(如make,gcc,gn等)。只需在当前项目的bundle.json文件中定义scripts脚本中的build命令,就可以通过执行hpm build执行编译。 222e41f4b71Sopenharmony_ci 223e41f4b71Sopenharmony_ci 224e41f4b71Sopenharmony_ci### 定义编译脚本 225e41f4b71Sopenharmony_ci 226e41f4b71Sopenharmony_ci以编译一个app目录下helloworld可执行文件为例: 227e41f4b71Sopenharmony_ci 228e41f4b71Sopenharmony_ci 229e41f4b71Sopenharmony_ci``` 230e41f4b71Sopenharmony_ciapp 231e41f4b71Sopenharmony_ci├── BUILD.gn 232e41f4b71Sopenharmony_ci├── include 233e41f4b71Sopenharmony_ci│ └── helloworld.h 234e41f4b71Sopenharmony_ci└── src 235e41f4b71Sopenharmony_ci └── helloworld.c 236e41f4b71Sopenharmony_ci``` 237e41f4b71Sopenharmony_ci 238e41f4b71Sopenharmony_ci在helloworld.c同级目录下新建一个BUILD.gn 239e41f4b71Sopenharmony_ci 240e41f4b71Sopenharmony_ci 241e41f4b71Sopenharmony_ci``` 242e41f4b71Sopenharmony_citouch BUILD.gn 243e41f4b71Sopenharmony_civim BUILD.gn 244e41f4b71Sopenharmony_ci``` 245e41f4b71Sopenharmony_ci 246e41f4b71Sopenharmony_ci以下是BUILD.gn的样例,仅供参考 247e41f4b71Sopenharmony_ci 248e41f4b71Sopenharmony_ci 249e41f4b71Sopenharmony_ci``` 250e41f4b71Sopenharmony_ciexecutable("hello_world") { 251e41f4b71Sopenharmony_ci sources = [ 252e41f4b71Sopenharmony_ci "src/helloworld.c" 253e41f4b71Sopenharmony_ci ] 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci include_dirs = [ 256e41f4b71Sopenharmony_ci "include" 257e41f4b71Sopenharmony_ci ] 258e41f4b71Sopenharmony_ci} 259e41f4b71Sopenharmony_ci``` 260e41f4b71Sopenharmony_ci 261e41f4b71Sopenharmony_ci>  **说明:** 262e41f4b71Sopenharmony_ci> - “executable”是gn内置模板,可以用“gn help executable ”查看使用方法。 263e41f4b71Sopenharmony_ci> 264e41f4b71Sopenharmony_ci> - “sources ”是源码路径,“include_dirs ”是头文件路径。 265e41f4b71Sopenharmony_ci 266e41f4b71Sopenharmony_ci 267e41f4b71Sopenharmony_ci### 执行编译 268e41f4b71Sopenharmony_ci 269e41f4b71Sopenharmony_ci在当前文件夹下,执行编译命令: 270e41f4b71Sopenharmony_ci 271e41f4b71Sopenharmony_ci 272e41f4b71Sopenharmony_ci``` 273e41f4b71Sopenharmony_cihpm build 274e41f4b71Sopenharmony_ci``` 275e41f4b71Sopenharmony_ci 276e41f4b71Sopenharmony_ci在完成一系列的编译动作后,显示build succeed。检查编译的输出结果: 277e41f4b71Sopenharmony_ci 278e41f4b71Sopenharmony_ci 279e41f4b71Sopenharmony_ci 280e41f4b71Sopenharmony_ci 281e41f4b71Sopenharmony_ci### 编译image 282e41f4b71Sopenharmony_ci 283e41f4b71Sopenharmony_ci在当前发行版根目录下,执行如下命令。 284e41f4b71Sopenharmony_ci 285e41f4b71Sopenharmony_ci 286e41f4b71Sopenharmony_ci``` 287e41f4b71Sopenharmony_cihpm dist 288e41f4b71Sopenharmony_ci``` 289e41f4b71Sopenharmony_ci 290e41f4b71Sopenharmony_cihpm-cli工具会自动执行编译,生成镜像文件,如: 291e41f4b71Sopenharmony_ci 292e41f4b71Sopenharmony_ci 293e41f4b71Sopenharmony_ci``` 294e41f4b71Sopenharmony_ciout 295e41f4b71Sopenharmony_ci|-xxdist.img 296e41f4b71Sopenharmony_ci|-xx.file 297e41f4b71Sopenharmony_ci``` 298e41f4b71Sopenharmony_ci 299e41f4b71Sopenharmony_ci 300e41f4b71Sopenharmony_ci## 发布上架 301e41f4b71Sopenharmony_ci 302e41f4b71Sopenharmony_ci要发布Part到hpm,你需要先具备账号,并创建组织,创建组织的条件及详细步骤请参考[DevEco Marketplace](https://repo.harmonyos.com)上的帮助说明。 303e41f4b71Sopenharmony_ci 304e41f4b71Sopenharmony_ci完成账号申请和组织创建(或者加入一个现有的组织)后,您需要根据个人的邀请码(在[DevEco Marketplace](https://repo.harmonyos.com)的个人中心页查看),在本机生成公钥,并在[DevEco Marketplace](https://repo.harmonyos.com)的个人中心进行配置。 305e41f4b71Sopenharmony_ci 306e41f4b71Sopenharmony_ci 307e41f4b71Sopenharmony_ci``` 308e41f4b71Sopenharmony_cihpm config set loginUser {your-invitation-code} 309e41f4b71Sopenharmony_cihpm gen-keys 310e41f4b71Sopenharmony_ci``` 311e41f4b71Sopenharmony_ci 312e41f4b71Sopenharmony_ci生成的文件将会存放在~\Users\yourname\.hpm\key下,将公钥文件(publicKey_your-accout.pem)中内容拷贝到hpm个人中心的SSH公钥中。 313e41f4b71Sopenharmony_ci 314e41f4b71Sopenharmony_ci完成上述操作后,你就具备了在您的组织内发布Part的权限了。 315e41f4b71Sopenharmony_ci 316e41f4b71Sopenharmony_ci在Part所在目录,执行命令hpm publish,将会完成组件的打包发布操作。 317e41f4b71Sopenharmony_ci 318e41f4b71Sopenharmony_ci 319e41f4b71Sopenharmony_ci``` 320e41f4b71Sopenharmony_cihpm publish 321e41f4b71Sopenharmony_ci``` 322e41f4b71Sopenharmony_ci 323e41f4b71Sopenharmony_ci>  **说明:** 324e41f4b71Sopenharmony_ci> - 为避免Part名称冲突,发布的Part的名称需限定在组织范围内,即命名为\@org_name/bundle_name的格式。 325e41f4b71Sopenharmony_ci> 326e41f4b71Sopenharmony_ci> - 你的账号也必须是org_name内的成员,才可以发布或更新组织内的Part。 327e41f4b71Sopenharmony_ci> 328e41f4b71Sopenharmony_ci> - 发布的组件,需要通过安全及内容审核,才能正式生效。 329e41f4b71Sopenharmony_ci 330e41f4b71Sopenharmony_ci 331e41f4b71Sopenharmony_ci## 使用HPM Part 332e41f4b71Sopenharmony_ci 333e41f4b71Sopenharmony_ci 334e41f4b71Sopenharmony_ci### 使用Part 335e41f4b71Sopenharmony_ci 336e41f4b71Sopenharmony_ci通常开发一个项目,需要引用其他的组件以加快特定功能的开发,可以采用安装依赖的方式。 337e41f4b71Sopenharmony_ci 338e41f4b71Sopenharmony_ci首先去[DevEco Marketplace](https://repo.harmonyos.com),根据关键字去搜索满足您的需求的组件,找到合适的组件后,将其引入到您的工程。典型的操作步骤包括: 339e41f4b71Sopenharmony_ci 340e41f4b71Sopenharmony_ci1. 使用hpm init命令创建一个包描述文件(名为bundle.json,包含了依赖和一些其他的元数据,如名称、版本等)。 341e41f4b71Sopenharmony_ci 342e41f4b71Sopenharmony_ci2. 使用hpm install <name>命令安装依赖(依赖写入bundle.json的dependencies字段)。 343e41f4b71Sopenharmony_ci 344e41f4b71Sopenharmony_ci3. 代码中共引用头文件,实现功能。 345e41f4b71Sopenharmony_ci 346e41f4b71Sopenharmony_ci4. 使用hpm build命令执行编译,输出编译结果。 347e41f4b71Sopenharmony_ci 348e41f4b71Sopenharmony_ci 在您的Part工程中(工程目录中必须包含bundle.json文件)执行如下命令: 349e41f4b71Sopenharmony_ci 350e41f4b71Sopenharmony_ci``` 351e41f4b71Sopenharmony_ci$ hpm install @scope/the_bundle 352e41f4b71Sopenharmony_ci``` 353e41f4b71Sopenharmony_ci 354e41f4b71Sopenharmony_ci 引用的Part将会被安装到你的工程所在的目录的ohos_bundle下 355e41f4b71Sopenharmony_ci 356e41f4b71Sopenharmony_ci``` 357e41f4b71Sopenharmony_ciproject 358e41f4b71Sopenharmony_ci├── ohos_bundle 359e41f4b71Sopenharmony_ci│ └── scope 360e41f4b71Sopenharmony_ci│ └─ the_bundle # <---引用的组件将会出现在这 361e41f4b71Sopenharmony_ci└── src 362e41f4b71Sopenharmony_ci│ └─ main.c 363e41f4b71Sopenharmony_ci├── bundle.json # 元数据声明文件 364e41f4b71Sopenharmony_ci└── LICENSE 365e41f4b71Sopenharmony_ci└── Makefile 366e41f4b71Sopenharmony_ci└── README.md 367e41f4b71Sopenharmony_ci``` 368e41f4b71Sopenharmony_ci 369e41f4b71Sopenharmony_ci打开bundle.json文件,可以看到Part已经被引入到您的工程的依赖中。 370e41f4b71Sopenharmony_ci 371e41f4b71Sopenharmony_ci 372e41f4b71Sopenharmony_ci``` 373e41f4b71Sopenharmony_ci{ 374e41f4b71Sopenharmony_ci "dependencies": { 375e41f4b71Sopenharmony_ci "@scope/the_bundle": "^1.0.0" 376e41f4b71Sopenharmony_ci } 377e41f4b71Sopenharmony_ci} 378e41f4b71Sopenharmony_ci``` 379e41f4b71Sopenharmony_ci 380e41f4b71Sopenharmony_ci您也可以一次性在此文件中编辑多个Part的依赖 381e41f4b71Sopenharmony_ci 382e41f4b71Sopenharmony_ci 383e41f4b71Sopenharmony_ci``` 384e41f4b71Sopenharmony_ci{ 385e41f4b71Sopenharmony_ci "dependencies": { 386e41f4b71Sopenharmony_ci "@scope/the_bundle1": "^1.0.0", 387e41f4b71Sopenharmony_ci "@scope/the_bundle2": "^2.0.0", 388e41f4b71Sopenharmony_ci "@scope/the_bundle3": "^3.0.0", 389e41f4b71Sopenharmony_ci "@scope/the_bundle4": "^1.1.0" 390e41f4b71Sopenharmony_ci } 391e41f4b71Sopenharmony_ci} 392e41f4b71Sopenharmony_ci``` 393e41f4b71Sopenharmony_ci 394e41f4b71Sopenharmony_ci再执行hpm install命令,将会一次性将所有未安装的Part一次性全部下载并安装完成。 395e41f4b71Sopenharmony_ci 396e41f4b71Sopenharmony_ci 397e41f4b71Sopenharmony_ci### 安装全局Part 398e41f4b71Sopenharmony_ci 399e41f4b71Sopenharmony_ci如果引用的Part是多个项目共用的组件(如编译工具链),你可以全局安装 400e41f4b71Sopenharmony_ci 401e41f4b71Sopenharmony_ci 在您的Part工程中(工程目录中必须包含bundle.json文件)执行如下命令: 402e41f4b71Sopenharmony_ci 403e41f4b71Sopenharmony_ci``` 404e41f4b71Sopenharmony_ci$ hpm install -g @scope/the_tool 405e41f4b71Sopenharmony_ci``` 406e41f4b71Sopenharmony_ci 407e41f4b71Sopenharmony_ci 引用的Part将会被安装到你在hpm config中设置的globalRepo所指定的目录下: 408e41f4b71Sopenharmony_ci 409e41f4b71Sopenharmony_ci``` 410e41f4b71Sopenharmony_ci~\.hpm\global\ohos_bundles 411e41f4b71Sopenharmony_ci│ └── scope 412e41f4b71Sopenharmony_ci│ └─ the_tool # <---引用的组件将会出现在这 413e41f4b71Sopenharmony_ci``` 414e41f4b71Sopenharmony_ci 415e41f4b71Sopenharmony_ci>  **说明:** 416e41f4b71Sopenharmony_ci> - 在项目安装的Part,在执行hpm编译命令时可以通过引用环境变量DEP_SCOPE_bundle_name,例如: 417e41f4b71Sopenharmony_ci> 通过hpm i \@opensource/gn安装后,可以编辑bundle.json中的编译脚本,如下: 418e41f4b71Sopenharmony_ci> 419e41f4b71Sopenharmony_ci> ``` 420e41f4b71Sopenharmony_ci> "scripts": { 421e41f4b71Sopenharmony_ci> "build": "${DEP_OPENSOURCE_gn}/gn --version" 422e41f4b71Sopenharmony_ci> }, 423e41f4b71Sopenharmony_ci> ``` 424e41f4b71Sopenharmony_ci> 425e41f4b71Sopenharmony_ci> 然后就可以通过执行hpm build将调用gn的功能。 426e41f4b71Sopenharmony_ci> 427e41f4b71Sopenharmony_ci> - 在全局安装的Part,可以通过设置系统环境变量,直接调用,或者hpm config set key value的方式,通过${key}/tool_name的方式引用,例如: 428e41f4b71Sopenharmony_ci> 429e41f4b71Sopenharmony_ci> ``` 430e41f4b71Sopenharmony_ci> hpm i -g @ohos/opensource/gn 431e41f4b71Sopenharmony_ci> hpm config BUILD_SYS_GN ~/.hpm/global/ohos_bundles/opensource/gn 432e41f4b71Sopenharmony_ci> ``` 433e41f4b71Sopenharmony_ci> 434e41f4b71Sopenharmony_ci> 可以编辑bundle.json中的编译脚本,如下: 435e41f4b71Sopenharmony_ci> 436e41f4b71Sopenharmony_ci> ``` 437e41f4b71Sopenharmony_ci> "scripts": { 438e41f4b71Sopenharmony_ci> "build": "${BUILD_SYS_GN}/gn --version" 439e41f4b71Sopenharmony_ci> }, 440e41f4b71Sopenharmony_ci> ``` 441e41f4b71Sopenharmony_ci> 442e41f4b71Sopenharmony_ci> 然后就可以通过执行hpm build将调用gn的功能。 443