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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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.js20e41f4b71Sopenharmony_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   > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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   > ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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![zh-cn_image_0000001217486680](figures/zh-cn_image_0000001217486680.png)
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_cihelloworld.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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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![zh-cn_image_0000001262166533](figures/zh-cn_image_0000001262166533.png)
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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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