首页 > 其他分享 >HarmonyOS 私仓搭建实战

HarmonyOS 私仓搭建实战

时间:2024-08-07 19:24:08浏览次数:13  
标签:配置 默认 repo HarmonyOS 私仓 ohpm ##### 搭建

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 会部署到多台机器中,具有相同的配置内容,并且共享数据存储空间。

依赖环境安装

  1. ohpm-repo 依赖于 node 运行,支持 node.js 16.x 及以上版本,需要先安装 nodejs,并进行环境配置。NodeJs安装可以从官网(https://nodejs.org/download/release/latest/)下载。

下载ohpm-repo工具

  1. 下载ohpm-repo工具,下载地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-software-download-0000001507075446
  2. 解压ohpm-repo工具

配置ohpm-repo环境变量

  1. 将ohpm-repo工具包解压目录中bin目录的路径配置到系统环境变量path中:export PATH=$OHPM-REPO-PATH/bin:$PATH
  2. 执行命令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. 为所有项目配置该私有仓:1. ohpm config set registry <配置的私仓服务地址>/repos/ohpm
  2. 针对某次依赖安装配置: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页面来发布,一般开发工作中为了方便和效率,我们都使用命令行发布。

  1. 本地生成ssh秘钥:1. ssh-keygen -m PEM -t RSA -b 4096 -f <your_key_path>
  2. 登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,新增公钥,将公钥文件(<your_key_path>.pub)的内容粘贴到公钥输入框中。
  3. 设置私钥路径:ohpm config set key_path <your_key_path>
  4. 登录 ohpm-repo 私仓管理地址,单击主页右上角的个人中心,复制发布码。
  5. 将发布码配置到 .ohpmrc 文件中:ohpm config set publish_id <your_publish_id>
  6. 发布静态共享库:ohpm publish demo.har
  7. 发布动态共享:ohpm publish demo.tgz
    1. 动态共享包 HSP 包不能直接发布在私仓内,需要先转化为 .tgz 包
    2. 将编译模式切换成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)

总结

本文介绍了鸿蒙平台私仓搭建以及私仓共享包依赖与发布流程,并介绍了工模块依赖的复杂应用场景一键打包上传的最佳实践。

参考

标签:配置,默认,repo,HarmonyOS,私仓,ohpm,#####,搭建
From: https://blog.csdn.net/sjw890821sjw/article/details/140923000

相关文章

  • HarmonyOS 音视频之音频采集实战
    HarmonyOS音视频之音频采集实战背景应用开发过程中很多场景都有音频采集需求,比如聊天功能的发送语音功能,实时语音转文本功能,实时语音通话,实时视频通话等。在Android和iOS端,系统提供了两种形式:实时音频流采集音频文件录制系统还提供了不同形式的API,比如Android:AudioRec......
  • 搭建 Web 群集Haproxy
    案例概述        Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx。相比较而言,LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好。Haproxy官方网站是http://ww......
  • 如何利用 LNMP 搭建 WordPress 站点
    在这个信息爆炸的时代,拥有一个能够迅速传达信息、展示个性、并能够与世界互动的在线平台,已成为企业和个人的基本需求。WordPress,以其无与伦比的易用性和强大的扩展性,成为了构建此类平台的首选工具。而LNMP,这个由Linux、Nginx、MySQL和PHP组成的强大组合,为WordPress提供了一个稳定......
  • HarmonyOS DevEco Studio彻底修改工程名称
    关闭项目将项目文件夹替换为新的名称后重新打开项目将AppScope/app.json5中的bundleName改为新的包名{"app":{"bundleName":"com.example.newname",//改为新的包名"vendor":"example","versionCode":1000000,"......
  • 基于vscode搭建freertos环境
    前言目前网上windows仿真freertos的资料都是比较久远的,不太适合现有的开发,因此重新整理了一下资料.目标:使用Vscode进行FreeRTOS开发和仿真.关键词:freertos,vscode,llvm,cmake,windows环境配置编译器目前使用的是llvm-MinGW-msvcrt:Releases·mstorsjo/llvm-mingw(g......
  • [环境搭建]编码工具-lombok.jar引入环境
    UAPStudio.ini里添加:-Dfile.encoding=UTF-8-javaagent:lombok.jar-Xbootclasspath/a:lombok.jarlombok.jar放在UAPStudio.ini里同一级目录Eclipse报告内存不足和PermSizeSpace错误,Eclipse死掉的解决办法:在eclipse.ini配置文件总加上以下两行:-XX:PermSize=128M-XX:MaxP......
  • HarmonyOS SDK助力美团单车提供便捷流畅扫码新体验
    背景在使用美团单车前,用户需要进行一系列的操作------打开美团App,点击"骑车"进入界面后,再点击"扫码用车",完成扫码后点击"确认开锁",才能最终完成单车开锁。一个简单的动作涉及5个步骤,在远距离或光线过暗等情况下,甚至还需要进行多次扫码才能开锁。策略作为国内头部的科技零售企业......
  • HarmonyOS鸿蒙应用开发之Row & Colum组件的使用
    文章目录Row组件Column组件注意事项其他属性Row和Column组件的通用属性Row组件特有的属性和用法Column组件特有的属性和用法示例代码在HarmonyOS(鸿蒙系统)中,Row和Column组件是ArkTS(ArkTypeScript)语言用于构建用户界面的基础布局容器。它们分别用于实......
  • 2024宝塔批量建站搭建易优cms_易优批量上站
     宝塔全自动搭建易优cms批量建站 软件教程文本:大家好,这里是好主题网nbzhuti.cnQQ:822674928今天给大家带来的是易优cms批量建站首先我们要准备宝塔,开启宝塔api,然后相关信息填写到config.iniconfig.ini里面可以填写其他的配置项比如:php版本网站的用户名,密码,伪静态这......
  • 短视频矩阵获客系统开发搭建-ai文案+剪辑+去水印
    短视频矩阵获客系统是指利用多个短视频平台进行协同运营,通过发布高质量的短视频内容来吸引、转化潜在客户的营销策略。该系统集合了内容生产、分发、数据分析等功能于一体,为企业提供了一站式的短视频营销解决方案。一、短视频矩阵系统的优势提高营销效率:通过整合多个平台,减少......