1e41f4b71Sopenharmony_ci# HPM Part参考
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ci本文档将介绍HPM的Part的构成,包类型、划分原则、元数据字段以及相关命令行工具的常用命令等。
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci### Part划分原则
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ci原则上应尽可能划分为细颗粒度的Part,以满足最大限度的复用。主要考虑以下几点:
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci- 独立性:Part的功能应该相对独立,支持独立编译,可以单独对外提供接口和服务;
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci- 耦合性:如果Part必须依赖其他的Part,才能对外提供服务,应考虑和被依赖的Part合并为一个Part。
14e41f4b71Sopenharmony_ci
15e41f4b71Sopenharmony_ci- 相关性:如果一组Part共同完成一项功能,且没有被其他Part依赖,未来也没有被依赖的可能,则可以考虑合并为一个Part。
16e41f4b71Sopenharmony_ci
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci### Part类型
19e41f4b71Sopenharmony_ci
20e41f4b71Sopenharmony_ciPart是为复用而生,一切可以复用的部件都可以定义为Part,可以分为:
21e41f4b71Sopenharmony_ci
22e41f4b71Sopenharmony_ci  **表1** HPM Part分类
23e41f4b71Sopenharmony_ci
24e41f4b71Sopenharmony_ci| 部件 | 说明 | 
25e41f4b71Sopenharmony_ci| -------- | -------- |
26e41f4b71Sopenharmony_ci| source | 以源码形式分发,被目标工程依赖、可独立编译。 | 
27e41f4b71Sopenharmony_ci| binary | 以二进制形式分发,不包含源代码,例如编译工具。 | 
28e41f4b71Sopenharmony_ci| code-segment | 以代码片段形式分发,无法独立编译,安装后还原到指定目录,在目标工程参与其他代码编译。 | 
29e41f4b71Sopenharmony_ci| distribution | 以发行版形式分发,依赖其他Part,不包含源码(编译脚本除外),编译输出为系统镜像。 | 
30e41f4b71Sopenharmony_ci| template | 以模板形态分发,用于hpm init创建模板。 | 
31e41f4b71Sopenharmony_ci| plugin | 以插件形态分发,作为hpm cli的插件,扩展hpm cli的功能。 | 
32e41f4b71Sopenharmony_ci
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ci### Part构成
35e41f4b71Sopenharmony_ci
36e41f4b71Sopenharmony_ci一个Part包一般包含如下内容:
37e41f4b71Sopenharmony_ci
38e41f4b71Sopenharmony_ci- Part包的代码或库(src目录下的代码文件)
39e41f4b71Sopenharmony_ci
40e41f4b71Sopenharmony_ci- ohos_bundles文件夹(存放依赖的Part,安装Part时自动生成,无需提交到代码库)
41e41f4b71Sopenharmony_ci
42e41f4b71Sopenharmony_ci- Part包的说明文件(README.md)
43e41f4b71Sopenharmony_ci
44e41f4b71Sopenharmony_ci- Part包元数据声明文件(bundle.json)
45e41f4b71Sopenharmony_ci
46e41f4b71Sopenharmony_ci- 开源许可文件(LICENSE)
47e41f4b71Sopenharmony_ci    
48e41f4b71Sopenharmony_ci  ```
49e41f4b71Sopenharmony_ci  my-bundle
50e41f4b71Sopenharmony_ci     |_ohos_bundles
51e41f4b71Sopenharmony_ci     |_headers
52e41f4b71Sopenharmony_ci     |_src
53e41f4b71Sopenharmony_ci     |_bundle.json
54e41f4b71Sopenharmony_ci     |_README.md
55e41f4b71Sopenharmony_ci     |_LICENSE
56e41f4b71Sopenharmony_ci  ```
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci### src源代码
60e41f4b71Sopenharmony_ci
61e41f4b71Sopenharmony_ciPart的代码文件和普通的代码目录没有差异。但要注意的是,Part中对外暴露的接口(头文件),会被其他Part所引用,需要单独在bundle.json的dirs中声明。
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci### README文件
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ci为了帮助他人在[DevEco Marketplace](https://repo.harmonyos.com)上找到该Part,并更方便的使用它,在Part的根目录中包含一个README文件。
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ciREADME.md,为markdown格式的描述关于Part自述说明文件。
69e41f4b71Sopenharmony_ci
70e41f4b71Sopenharmony_ciREADME文件应包括如何安装,配置和使用Part包中的实例代码说明,以及可能会对用户有所帮助的任何其他信息。
71e41f4b71Sopenharmony_ci
72e41f4b71Sopenharmony_ci自述文件将显示在[DevEco Marketplace](https://repo.harmonyos.com)的Part的详情页面中。
73e41f4b71Sopenharmony_ci
74e41f4b71Sopenharmony_ci
75e41f4b71Sopenharmony_ci## bundle.json文件
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_cibundle.json文件是对当前Part的元数据描述,每个Part中必须包含一个bundle.json文件。主要内容如下:
78e41f4b71Sopenharmony_ci
79e41f4b71Sopenharmony_ci  
80e41f4b71Sopenharmony_ci```
81e41f4b71Sopenharmony_ci{
82e41f4b71Sopenharmony_ci  "name": "@myorg/demo-bundle",
83e41f4b71Sopenharmony_ci  "version": "1.0.0",
84e41f4b71Sopenharmony_ci  "license": "MIT",
85e41f4b71Sopenharmony_ci  "description": "bundle description",
86e41f4b71Sopenharmony_ci  "keywords": ["hos"],
87e41f4b71Sopenharmony_ci  "tags": ["applications", "drivers"],
88e41f4b71Sopenharmony_ci  "author": {"name":"","email":"","url":""},
89e41f4b71Sopenharmony_ci  "contributors":[{"name":"","email":"","url":""},{"name":"","email":"","url":""}],
90e41f4b71Sopenharmony_ci  "homepage": "http://www.foo.bar.com",
91e41f4b71Sopenharmony_ci  "repository": "https://git@gitee.com:foo/bar.git",
92e41f4b71Sopenharmony_ci  "private": false,
93e41f4b71Sopenharmony_ci  "publishAs": "code-segment",
94e41f4b71Sopenharmony_ci  "segment":{
95e41f4b71Sopenharmony_ci     "destPath":"/the/dest/path"
96e41f4b71Sopenharmony_ci  },
97e41f4b71Sopenharmony_ci  "dirs": {
98e41f4b71Sopenharmony_ci    "src": ["src/**/*.c"],
99e41f4b71Sopenharmony_ci    "headers": ["headers/**/*.h"],
100e41f4b71Sopenharmony_ci    "bin": ["bin/**/*.o"]
101e41f4b71Sopenharmony_ci  },
102e41f4b71Sopenharmony_ci  "scripts": {
103e41f4b71Sopenharmony_ci    "build": "make"
104e41f4b71Sopenharmony_ci  },
105e41f4b71Sopenharmony_ci  "envs": {},
106e41f4b71Sopenharmony_ci  "ohos": {
107e41f4b71Sopenharmony_ci    "os": "2.0.0",
108e41f4b71Sopenharmony_ci    "board": "hi3516",
109e41f4b71Sopenharmony_ci    "kernel": "liteos-a"
110e41f4b71Sopenharmony_ci  },
111e41f4b71Sopenharmony_ci "rom": "10240",
112e41f4b71Sopenharmony_ci "ram": "1024",
113e41f4b71Sopenharmony_ci "dependencies": {
114e41f4b71Sopenharmony_ci    "@myorg/net":"1.0.0"
115e41f4b71Sopenharmony_ci }
116e41f4b71Sopenharmony_ci}
117e41f4b71Sopenharmony_ci```
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_cibundle.json文件具有如下功能:
120e41f4b71Sopenharmony_ci
121e41f4b71Sopenharmony_ci- name:定义Part的名称,放到组织下, 以\@开头,/分割,如:\@myorg/mybundle
122e41f4b71Sopenharmony_ci
123e41f4b71Sopenharmony_ci- version:定义Part版本号,如1.0.0,需满足semver的标准。
124e41f4b71Sopenharmony_ci
125e41f4b71Sopenharmony_ci- description:一句话对Part进行简要的描述。
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci- dependencies:定义Part的依赖Part。
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_ci- envs: 定义Part编译时所需要的参数,包括全局参数以及依赖所需的参数。
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ci- scripts:定义在当前Part下能够执行的命令(如编译,构建,测试,烧录等)。
132e41f4b71Sopenharmony_ci
133e41f4b71Sopenharmony_ci- publishAs:定义Part的发布类型(source:源码,binary:二进制,distribution:发行版,code-segment:代码片段)。
134e41f4b71Sopenharmony_ci
135e41f4b71Sopenharmony_ci- segment: 仅针对code-segment类型的Part,定义Part的目标路径(即安装后,Part包中包含的文件复制到的目标路径)
136e41f4b71Sopenharmony_ci
137e41f4b71Sopenharmony_ci- dirs:定义发布时打包的目录结构(如头文件)。
138e41f4b71Sopenharmony_ci
139e41f4b71Sopenharmony_ci- ram&rom:统计相关信息:预计占用ROM和RAM信息。
140e41f4b71Sopenharmony_ci
141e41f4b71Sopenharmony_ci- ohos:描述OpenHarmony操作系统版本、开发板及内核的匹配关系(多个请用英文逗号的“,”分割)。
142e41f4b71Sopenharmony_ci
143e41f4b71Sopenharmony_ci- 定义其他扩展信息:作者,主页,代码仓库,许可协议,标签,关键字。
144e41f4b71Sopenharmony_ci
145e41f4b71Sopenharmony_ci- 对于发行版类型,可以定义继承关系,用base字段描述继承自的基础发行版及版本。
146e41f4b71Sopenharmony_ci
147e41f4b71Sopenharmony_ci- private:定义是否为私有包,私有包在公共的注册中心中无法被其他用户搜索到,默认为false(只有组织的类型为)。
148e41f4b71Sopenharmony_ci
149e41f4b71Sopenharmony_ci
150e41f4b71Sopenharmony_ci## HPM CLI命令
151e41f4b71Sopenharmony_ci
152e41f4b71Sopenharmony_ciPart的全生命周期管理,可以通过hpm命令工具进行操作,hpm的操作命令如下(详细帮助可以执行hpm -h学习):
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci  **表2** hpm操作命令
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci| 命令类别 | 命令行 | 含义说明 | 
157e41f4b71Sopenharmony_ci| -------- | -------- | -------- |
158e41f4b71Sopenharmony_ci| 版本查询 | hpm -V或hpm --version | 查看hpm-cli版本号。 | 
159e41f4b71Sopenharmony_ci| 帮助查询 | hpm -h或hpm --version | 查看命令列表及帮助。 | 
160e41f4b71Sopenharmony_ci|| hpm -h | 查看命令帮助。 | 
161e41f4b71Sopenharmony_ci| 创建 | hpm init bundle | 创建Part工程。 | 
162e41f4b71Sopenharmony_ci|| hpm init -t template | 根据模板创建脚手架工程。 | 
163e41f4b71Sopenharmony_ci| 安装 | hpm install或hpm i | 安装bundle.json中依赖的Part。 | 
164e41f4b71Sopenharmony_ci|| hpm install bundle\@version | 安装指定Part版本。 | 
165e41f4b71Sopenharmony_ci| 卸载 | hpm uninstall bundle | 删除depedencies依赖的Part。 | 
166e41f4b71Sopenharmony_ci|| hpm remove或hpm rm bundlename | 删除depedencies依赖的Part。 | 
167e41f4b71Sopenharmony_ci| 查看 | hpm list或者hpm ls | 显示当前HPM Part的依赖树。 | 
168e41f4b71Sopenharmony_ci|| hpm dependencies | 生成当前HPM Part依赖关系数据(在hpm ui也集成了该命令的调用,可以图形化的展示) | 
169e41f4b71Sopenharmony_ci| 搜索 | hpm search name | 搜索Bundle,--json,可以以json格式输出 -type 可以设置搜索Bundle的类型,包括part、distribution、code-segment三种。 | 
170e41f4b71Sopenharmony_ci| 设置hpm配置项 | hpm config set key value | 设置配置值,如服务器地址,网络代理。 | 
171e41f4b71Sopenharmony_ci|| hpm config delete key | 删除配置。 | 
172e41f4b71Sopenharmony_ci| 更新 | hpm update | 更新当前Part依赖的Part的版本。 | 
173e41f4b71Sopenharmony_ci|| hpm check-update | 检查依赖的Part版本是否有更新。 | 
174e41f4b71Sopenharmony_ci| 编译 | hpm build | 编译HPM Part。 | 
175e41f4b71Sopenharmony_ci|| hpm dist | 针对发行版(distribution),发行版编译构建(依赖bundle.json的scripts中的dist脚本)。 | 
176e41f4b71Sopenharmony_ci| 打包 | hpm pack | 本地Part打包依赖。 | 
177e41f4b71Sopenharmony_ci| 烧录 | hpm run flash | 烧录固件(依赖bundle.json的scripts中的flash脚本)。 | 
178e41f4b71Sopenharmony_ci| 发布 | hpm publish | 发布Part,发布的Part在仓库中必须唯一,且版本唯一(需要账号登录)。 | 
179e41f4b71Sopenharmony_ci| 执行扩展命令 | hpm run | 执行bundle.json文件中定义的scripts脚本命令,支持多个命令可用 && 连接。 | 
180e41f4b71Sopenharmony_ci| 解压包 | hpm extract | 解压文件. 支持格式'zip'、'tar','tgz' 和'.tar.gz' | 
181e41f4b71Sopenharmony_ci| 启动图形化界面 | hpm ui | 本地启动HPM UI,可通过-p参数指定端口,Windows平台下会启动默认的浏览器打开 | 
182e41f4b71Sopenharmony_ci| 多语言切换 | hpm lang | 切换中英文操作界面(同时支持命令行和UI) | 
183e41f4b71Sopenharmony_ci| 转换为hpm包格式 | hpm x2h | 将一个maven格式或npm格式包转换成hpm的包格式,并发布到HPM | 
184e41f4b71Sopenharmony_ci| 代码段还原或清理 | hpm code clean\|restore | 针对依赖的代码段(code-segment)Part,执行清理或还原操作(即根据segment.destPath执行拷贝/删除操作) | 
185e41f4b71Sopenharmony_ci| 生成秘钥 | hpm gen-keys | 生成公钥/私钥对,将公钥配置到[DevEco Marketplace](https://repo.harmonyos.com),可以实现hpm-cli免密登录,发布Part。 | 
186e41f4b71Sopenharmony_ci| 生成第三方开源说明 | hpm gen-notice | 根据每个Part的说明,生成一份合并后的第三方开源说明的合并文件。 | 
187e41f4b71Sopenharmony_ci
188e41f4b71Sopenharmony_ci
189e41f4b71Sopenharmony_ci## 关于依赖
190e41f4b71Sopenharmony_ci
191e41f4b71Sopenharmony_ciPart的依赖分为必选依赖和可选依赖。
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ci- 必选依赖:是指Part A在完成某个功能时,必须引入Part B,调用B的接口或服务配合才能完成。称B为A的必选依赖。
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci- 可选依赖:是在Part A在完成某个功能时,可以引入Part C,也可以引入Part D。C和D可以相互替换,称C和D为A的可选依赖。
196e41f4b71Sopenharmony_ci
197e41f4b71Sopenharmony_ci  
198e41f4b71Sopenharmony_ci```
199e41f4b71Sopenharmony_ci"dependencies": {
200e41f4b71Sopenharmony_ci    "@myorg/core":"1.0.0",
201e41f4b71Sopenharmony_ci    "?@myorg/plugin1":"1.0.0",
202e41f4b71Sopenharmony_ci    "?@myorg/plugin2":"1.1.0"
203e41f4b71Sopenharmony_ci }
204e41f4b71Sopenharmony_ci```
205e41f4b71Sopenharmony_ci
206e41f4b71Sopenharmony_ciPart的依赖关系分为编译依赖和开发依赖。
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_ci- 编译依赖:运行时需要的依赖。
209e41f4b71Sopenharmony_ci
210e41f4b71Sopenharmony_ci- 开发依赖:非运行时需要的依赖,如静态检查、编译、打包、测试、格式化工具等。
211e41f4b71Sopenharmony_ci
212e41f4b71Sopenharmony_ci  
213e41f4b71Sopenharmony_ci```
214e41f4b71Sopenharmony_ci"dependencies": {
215e41f4b71Sopenharmony_ci    "@myorg/core":"1.0.0"
216e41f4b71Sopenharmony_ci },
217e41f4b71Sopenharmony_ci"devDependencies": {
218e41f4b71Sopenharmony_ci    "@myorg/tool":"1.0.0"
219e41f4b71Sopenharmony_ci }
220e41f4b71Sopenharmony_ci```
221e41f4b71Sopenharmony_ci
222e41f4b71Sopenharmony_ci  依赖中可以定义标签,对引入的依赖进行分组。在脚本中可以根据标签,获得这一组依赖的路径。定义的标签以\#开头,具体定义的方式为:
223e41f4b71Sopenharmony_ci  
224e41f4b71Sopenharmony_ci```
225e41f4b71Sopenharmony_ci{
226e41f4b71Sopenharmony_ci    "dependencies": {
227e41f4b71Sopenharmony_ci        "#tool": {
228e41f4b71Sopenharmony_ci            "first_bundle": "1.0.0",
229e41f4b71Sopenharmony_ci            "second_bundle": "1.0.0"
230e41f4b71Sopenharmony_ci        },
231e41f4b71Sopenharmony_ci        "#drivers": {
232e41f4b71Sopenharmony_ci            "xx_bundle": "1.0.0",
233e41f4b71Sopenharmony_ci            "yy_bundle": "1.0.0"
234e41f4b71Sopenharmony_ci        }
235e41f4b71Sopenharmony_ci    }
236e41f4b71Sopenharmony_ci}
237e41f4b71Sopenharmony_ci```
238e41f4b71Sopenharmony_ci
239e41f4b71Sopenharmony_ciPart的依赖关系(包括间接依赖)可以通过hpm list命令显示(也可以通过hpm ui命令在可视化的页面中显示)
240e41f4b71Sopenharmony_ci
241e41f4b71Sopenharmony_ci  
242e41f4b71Sopenharmony_ci```
243e41f4b71Sopenharmony_ci$ hpm list
244e41f4b71Sopenharmony_ci+--demo@1.0.0
245e41f4b71Sopenharmony_ci| +--@example/media@1.0.2
246e41f4b71Sopenharmony_ci| +--@demo/sport_hi3518ev300_liteos_a@1.0.0
247e41f4b71Sopenharmony_ci| | +--@demo/app@4.0.1
248e41f4b71Sopenharmony_ci| | | +--@demo/build@4.0.1
249e41f4b71Sopenharmony_ci| | | +--@demo/arm_harmonyeabi_gcc@4.0.0   
250e41f4b71Sopenharmony_ci| | +--@demo/liteos_a@4.0.0
251e41f4b71Sopenharmony_ci| | | +--@demo/third_party_fatfs@4.0.0     
252e41f4b71Sopenharmony_ci| | | +--@demo/arm_harmonyeabi_gcc@4.0.0   
253e41f4b71Sopenharmony_ci| | +--@demo/init@4.0.0
254e41f4b71Sopenharmony_ci| | +--@demo/dist_tools@4.0.0
255e41f4b71Sopenharmony_ci```
256e41f4b71Sopenharmony_ci
257e41f4b71Sopenharmony_ci
258e41f4b71Sopenharmony_ci## 关于环境变量
259e41f4b71Sopenharmony_ci
260e41f4b71Sopenharmony_ciPart在编译的过程中需要依赖系统提供的环境变量来自定义输出,链接所需二进制文件等。
261e41f4b71Sopenharmony_ci
262e41f4b71Sopenharmony_ci这里提出的环境变量均指根据需求把所需变量注入脚本执行的上下文中。
263e41f4b71Sopenharmony_ci
264e41f4b71Sopenharmony_ci所以在脚本中可以直接获取到变量的值。下面介绍当前系统存在的几种环境变量。
265e41f4b71Sopenharmony_ci
266e41f4b71Sopenharmony_ci**内置环境变量**:
267e41f4b71Sopenharmony_ci
268e41f4b71Sopenharmony_ci- DEP_OHOS_BUNDLES:表示ohos_bundles文件夹所在的路径。
269e41f4b71Sopenharmony_ci
270e41f4b71Sopenharmony_ci- DEP_BUNDLE_BASE:表示最外层Part的路径。
271e41f4b71Sopenharmony_ci
272e41f4b71Sopenharmony_ci**全局环境变量**
273e41f4b71Sopenharmony_ci
274e41f4b71Sopenharmony_ci全局环境变量由bundle.json中的envs属性来定义。整个Part中的依赖都可以获取到全局变量定义的值。
275e41f4b71Sopenharmony_ci
276e41f4b71Sopenharmony_ci  
277e41f4b71Sopenharmony_ci```
278e41f4b71Sopenharmony_ci{
279e41f4b71Sopenharmony_ci    "envs": {
280e41f4b71Sopenharmony_ci        "compileEnv": "arm"
281e41f4b71Sopenharmony_ci    }
282e41f4b71Sopenharmony_ci}
283e41f4b71Sopenharmony_ci```
284e41f4b71Sopenharmony_ci
285e41f4b71Sopenharmony_ci不同Part在引入依赖的过程中可以传入不同的参数,从而使依赖的编译可以满足当前Part的需求。依赖中定义的参数可以在对应依赖脚本执行的上下文中获取到。
286e41f4b71Sopenharmony_ci
287e41f4b71Sopenharmony_ci  
288e41f4b71Sopenharmony_ci```
289e41f4b71Sopenharmony_ci{
290e41f4b71Sopenharmony_ci    "dependencies": {
291e41f4b71Sopenharmony_ci        "my-bundle": {
292e41f4b71Sopenharmony_ci            "version": "1.0.0",
293e41f4b71Sopenharmony_ci            "mode": "debug"
294e41f4b71Sopenharmony_ci        }
295e41f4b71Sopenharmony_ci    }
296e41f4b71Sopenharmony_ci}
297e41f4b71Sopenharmony_ci```
298e41f4b71Sopenharmony_ci
299e41f4b71Sopenharmony_ciPart在链接二进制文件的时候,需要知道二进制文件在依赖中的路径,所以依赖的路径会作为环境变量传入编译Part中。
300e41f4b71Sopenharmony_ci
301e41f4b71Sopenharmony_ci传入的环境变量的格式为DEP_BundleName,BundleName为依赖的名称,例如DEP_first_bundle。
302e41f4b71Sopenharmony_ci
303e41f4b71Sopenharmony_ci
304e41f4b71Sopenharmony_ci## 关于命名和版本号
305e41f4b71Sopenharmony_ci
306e41f4b71Sopenharmony_ci1. 名称需要为全小写的英文字母或数字,中间可以使用下划线分隔。如 "bundle"、 "my_bundle"、"json2"。
307e41f4b71Sopenharmony_ci
308e41f4b71Sopenharmony_ci2. 发布到[DevEco Marketplace](https://repo.harmonyos.com)的Part的名称,需要以\@开头,通过组织名用/隔离, 如\@my_org/part_name
309e41f4b71Sopenharmony_ci
310e41f4b71Sopenharmony_ci3. 组织名+Part名称,需要是唯一的,且不容易和其他作者的Part名称混淆。
311e41f4b71Sopenharmony_ci
312e41f4b71Sopenharmony_ci4. 名称应该是容易理解,而非无意义的字母组合。
313e41f4b71Sopenharmony_ci
314e41f4b71Sopenharmony_ci5. 版本号应该遵循语义化命令格式:即 "主版本号.次版本号.修订号" 或 "主版本号.次版本号.修订号-先行版本号",比如 "1.0.0", "1.0.0-beta",详细规格可以参考 [https://semver.org](https://semver.org/)。
315