HarmonyOS 私仓搭建实战
配景
在Android和iOS开发中很多时间都以以二进制的产物的方式进行依靠和协作,Android基于Mave为堆栈,iOS有Pod为堆栈,我们可以在官方提供的的平台使用别人开放的库,极大的提高了大家的开发服从。但是有些公司业务相干的库并不想被外部职员使用,上传到外部共有的堆栈就不是很安全,很多公司在内部搭建了私有堆栈,一方面更加安全,另一方面平常推拉产物也更快。
鸿蒙也是同样的问题,我们可以方便的在官方堆栈平台使用三方开放的产物,但是公司内部业务照旧需要依靠私有堆栈,本文基于官方提供的工具搭建属于自己的私有堆栈。
鸿蒙共享包先容
鸿蒙共享包分静态共享包和动态共享包:
- HAR(Harmony Archive)是静态共享包,可以包罗代码、C++库、资源和设置文件。通过HAR可以实现多个模块或多个工程共享ArkUI组件、资源等相干代码。HAR不同于HAP,不能独立安装运行在设备上,只能作为应用模块的依靠项被引用。
- HSP(Harmony Shared Package)是动态共享包,静态共享包会打包到每个依靠的HAP里,这样导致包体积较大,且有重复多份公共资源和代码重复打包到应用中,动态共享包可以让多个HAP能够共享同一公共资源代码。HSP只支持在应用内共享,不支持跨应用共享
ohpm-repo私仓工具搭建私仓
官方提供了ohpm-repo工具帮助开发者快速搭建轻量级的ohpm私有堆栈,与 ohpm 包管理器兼容,并按需缓存全部依靠项,加快私有网络中的安装。
ohpm-repo 支持单点部署和多实例部署:
- 单点部署:ohpm-repo 仅部署在一台机器上使用。
- 多实例部署:ohpm-repo 会部署到多台机器中,具有雷同的设置内容,而且共享数据存储空间。
依靠情况安装
- ohpm-repo 依靠于 node 运行,支持 node.js 16.x 及以上版本,需要先安装 nodejs,并进行情况设置。NodeJs安装可以从官网(https://nodejs.org/download/release/latest/)下载。
下载ohpm-repo工具
- 下载ohpm-repo工具,下载地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-software-download-0000001507075446
- 解压ohpm-repo工具
设置ohpm-repo情况变量
- 将ohpm-repo工具包解压目录中bin目录的路径设置到系统情况变量path中:export PATH=$OHPM-REPO-PATH/binPATH
- 执行命令ohpm-repo -v查看版本号,验证解压包完备无损
ohpm-repo服务设置文件设置
进入解压目录的conf目录,打开config.yaml文件,默认设置如下:
- ##### server configuration section #####
- listen: 0.0.0.0:8088
- # listen:
- # - localhost:8088 # 监听本机环回地址
- # - http://localhost:8088 # 监听本机环回地址
- # - 0.0.0.0:8088 # 监听本机所有地址 (INADDR_ANY)
- # 协议可配置 http 或者 https,默认为 http
- # port: 1-65535(Windows系统)/ 1024-65535(Linux或Mac系统)
- # 可选 (listen 为 https 协议时必须配置)
- https_key: '' # https 服务使用的 key 的路径 (不配置默认为'')
- https_cert: '' # https 服务使用的 crt 的路径 (不配置默认为'')
- ##### server deploy root section #####
- deploy_root: '' # 安装根目录 (不配置默认为 `<现有用户home目录>/ohpm-repo`),只支持绝对路径,且路径目录必须存在
- ##### server numeric limit section #####
- max_package_size: 100 # 上传包大小限制,单位是MB (0, 100],不配置默认为 100
- max_extract_size: 500 # 压缩包解压后大小限制,单位是MB [max_package_size, 500],不配置默认为 500
- max_extract_file_num: 10240 # 压缩包解压后文件个数限制 (0, 102400],不配置默认为 10240
- user_rate_limit: 100 # 用户访问频率控制,单位是次/s (0, 10000],不配置默认为 100
- fetch_timeout: 60 # 请求/响应的超时时间,单位是秒 (0, 3600],不配置默认为 60
- keep_alive_timeout: 60 # TCP 保持连接的超时时间,单位是秒 (0, 3600],不配置默认为 60
- api_timeout: 60 # api超时时间,单位是秒(0, 3600],不配置默认为 60
- upload_lock_hour: 24 # 下架某一三方包所有版本后,限时禁止同名三方包上传,单位是小时 (0, 168],不配置,默认为 24
- upload_max_times: 100 # 单用户24小时内上传次数限制 (0, 10000],不配置默认为 100
- ##### metadata storage section #####
- ## 数据存储类型 filedb 和 mysql 二选一,不可都配置
- db: # 必须用 yaml 数组形式写法
- type: filedb
- config: # 如果想修改存储路径且保留旧的数据,则需要把旧路径下的数据文件迁移至新路径
- path: ./db # 本地数据存储路径,不配置默认为<deploy_root>/db;
- #db: # 必须用yaml数组形式写法
- # type: mysql
- # config:
- # host: "localhost" # 数据库主机地址
- # port: 3306 # 数据库端口 (0,65535]
- # username: root # 数据库的用户名
- # password: "password" # 数据库的用户密码(请配置明文, 最终在部署目录中会转换为密文)
- # database: "repo" # 数据库名
- ##### storage section #####
- ## 文件存储类型fs,sftp 和 custom 三选一,不可多选。
- store: # 必须用 yaml 数组形式写法
- type: fs
- config: # 上传资源后如若要修改存储路径,则需要把旧路径下的数据迁移至新路径中
- path: ./storage # 已上架三方库存储路径,不配置默认为 <deploy_root>/storage;
- #server: http://localhost:8088 # 三方库下载链接,不配置默认取值
- # 文件存储类型为 sftp 时,最多配置三个 sftp服务
- #store: # 必须用 yaml 数组形式写法
- # type: sftp # 当且仅当 db 的类型为 mysql 时,store 的类型才能为 sftp
- # config:
- # location:
- # -
- # name: test_one_sftp # 主机名字,名字不能与其他sftp配置重复
- # host: "localhost" # 主机地址
- # port: 22 # 主机端口 (0,65535]
- # read_username: "read" # 主机有读权限的用户名字
- # read_password: "password" # 主机有读权限的用户密码(请配置明文, 最终在部署目录中会转换为密文)
- # write_username: "write" # 主机有写权限的用户名字
- # write_password: "password" # 主机有写权限的用户密码(请配置明文, 最终在部署目录中会转换为密文)
- # path: /source22 # 相对 sftp 根目录的文件路径,仅限/开头,且路径文件夹必须存在
- # -
- # name: test_two_sftp
- # host: "localhost"
- # port: 24
- # read_username: "read"
- # read_password: "password"
- # write_username: "write"
- # write_password: "password"
- # path: /source24
- # #server: http://localhost:8088 # 本地仓库下载链接地址,不配置默认取 listen 的值、
- #store:
- # type: custom # custom是自定义存储插件类型,自定义存储插件开发流程见指导文档
- # config:
- # export_name: CustomStorage # 插件export的类名
- # plugin_path: ../plugins/CustomStorage.js # 插件的绝对路径或者相对于ohpm-repo软件包的路径,建议将插件放在软件包的plugins目录下
- # custom_field: "test" # 自定义字段,通过引入libs/common/getStorageConfigInfo.js的getStorageConfigInfo方法获取自定义字段的值
- # #server: http://localhost:8088 # 本地仓库下载链接地址,不配置默认取listen的值
- ##### uplink section #####
- uplink_cache_path: ./uplink # 缓存路径,不配置默认为 <deploy_root>/uplink
- uplink_cache_time: 168 # 远程包 metadata 缓存时间,单位为小时,默认 168 小时,取值范围为 (0, 8760]
- ##### log section #####
- logs_path: ./logs # 日志路径,不配置默认为 <deploy_root>/logs
- ##### log level section #####
- # 日志级别: 级别由低到高分别是 all、trace、debug、info、warn、error、fatal、mark、off
- # run,operate 和 access 不配置或者配置错误,默认为 info
- loglevel_run: info
- loglevel_operate: info
- loglevel_access: info
复制代码 包罗监听端口、https设置、私仓部署目录deploy_root、服务相干设置server、存储设置db、日志logs等,按照实际情况设置即可。
关于存储模块:
db是元数据存储的设置项,db支持fileDB本地存储和mysql数据库存储
store是文件存储的设置项,store支持local storage本地存储,sftp storage存储和custom storage 自界说插件存储。
私仓成功启动后修改设置文件方法:
- 首次启动私仓时执行install命令指定设置文件:找到指定的设置文件进行文件内容修改,然后重新执行install指定修改后的设置文件,再执行start启动私仓。
- 首次启动私仓时执行install命令未指定设置文件:默认使用私仓压缩包解压路径下conf目录中的设置文件,修改该文件内容,然后重新执行install和start操作。
安装启动
执行ohpm-repo install安装,安装完成后根据设置设置情况变量,设置完成后执行ohpm-repo start启动服务。
使用私仓共享包
默认情况客户端ohpm工具,拉取依靠包只会从官方公开堆栈拉取,想从私仓拉取需要进行额外的设置,设置方式有两种:
- 为全部项目设置该私有仓:1. ohpm config set registry <设置的私仓服务地址>/repos/ohpm
- 针对某次依靠安装设置:1. ohpm install @ohos/lottie --registry <设置的私仓服务地址>/repos/ohpm
上面设置的私仓服务地址是设置文件中 store.config.server 的地址信息,例如: store.config.server :为 http://127.0.0.1:8088,则 registry 为:http://127.0.0.1:8088/repos/ohpm。如果store.config.server 没有设置,取默认值。
发布共享包
本地开发的共享包不管是静态共享包照旧动态共享包,都可以通过ohpm命令工具或者使用Web页面来发布,一般开发工作中为了方便和服从,我们都使用命令行发布。
- 本地天生ssh秘钥:1. ssh-keygen -m PEM -t RSA -b 4096 -f <your_key_path>
- 登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,新增公钥,将公钥文件(<your_key_path>.pub)的内容粘贴到公钥输入框中。
- 设置私钥路径:ohpm config set key_path <your_key_path>
- 登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,复制发布码。
- 将发布码设置到 .ohpmrc 文件中:ohpm config set publish_id <your_publish_id>
- 发布静态共享库:ohpm publish demo.har
- 发布动态共享:ohpm publish demo.tgz
- 动态共享包 HSP 包不能直接发布在私仓内,需要先转化为 .tgz 包
- 将编译模式切换成release模式会打包出.taz包
模块设置
在库模块中(与src文件夹同一级目录下),添加如下文件:
- 新建README.md文件:在README.md文件中必须包罗包的先容和引用方式,还可以根据包的内容添加更具体先容。
- 新建CHANGELOG.md文件:填写HAR的版本更新记载。
- 添加LICENSE文件:LICENSE许可文件。
README.md文件终极会展示在私仓网页平台,依靠使用方可以根据README.md说明直接使用,所以最好描述清晰。
oh_package.json5设置文件说明:
- {
- "parameterFile": "../dependencies.json5",
- "keywords": [
- "asr"
- ],
- "name": "@xx/base-asr",
- "version": "1.0.0-rc.9",
- "repository": "http://gerrit.google.com/mobile_harmony/base_asr",
- "description": "asr sdk",
- "main": "Index.ets",
- "author": "qingkouwei",
- "license": "Apache-2.0",
- "dependencies": {
-
- }
- }
复制代码 模块名称,版本号,说明都要符合要求,否会会上传私仓失败。版本号只能依次递增,无法向Android一样一个SNAPSHOT无限覆盖。
最佳实践
在实际开发过程中,一个工程可能会有多个SDK,SDK开发完成需要接入到其他工程,有事在定位问题调试时可能要频繁的上传到私仓,其他工程依靠打包后调试,这样每次编译sdk,在执行命令上传特别繁琐,服从低下,特别是一个工程有多个SDK,而且SDK尚有依靠的情况下。
最好的办法是可以通过脚本一键编译和上传到私仓,而且根据依靠关系依次上传,也可以单独打包上传某个module。
先创建一个version.json5存放SDK版本:
- {
- "project": {
- "sdk_version": "1.1.0-rc.1",
- }
- }
复制代码 自动打包:
- def run_commands(modulename, productname):
- hvigor_home = '/Applications/DevEco-Studio.app/Contents/tools/hvigor'
-
- # 打包命令
- command1 = 'node %s/bin/hvigorw.js --mode module -p product=default -p module=%s@default -p buildMode=debug assembleHar --analyze --parallel --incremental --daemon' %(hvigor_home,modulename)
-
- # 等待第一个命令执行完成
- process1.wait()
-
- # 上传命令
- ohpm publish productname
- process2.wait()
复制代码 自动修改版本号:
- def changeVersionAModule():
- with open('version.json5', 'r') as f:
- data = json5.load(f)
- versionName = data['project']['sdk_version']
-
- with open('AModule/oh-package.json5', 'r') as f:
- aData = json5.load(f)
- aData['version'] = versionName
- with open('AModule/oh-package.json5', 'w') as f:
- json.dump(aData, f, indent=4)
-
- with open('dependencies.json5', 'r') as depf:
- depData = json5.load(depf)
- depData['version_base']['base-a'] = versionName
- with open('dependencies.json5', 'w') as depf:
- json.dump(depData, depf, indent=4)
复制代码 总结
本文先容了鸿蒙平台私仓搭建以及私仓共享包依靠与发布流程,并先容了工模块依靠的复杂应用场景一键打包上传的最佳实践。
参考
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |