智能客服
你问我答,随时在线为你解决问题
ohpm配置文件。
ohpm从命令行和.ohpmrc文件中获取其配置内容。ohpm config命令可用于修改用户级.ohpmrc文件的内容。
.ohpmrc 文件中以"#"或";"字符为注释符。
执行如下命令可设置用户级配置:
- ohpm config set key value
| 配置项 | 字段名称 | 字段说明 | 字段类型 | 默认值 | 备注 |
|---|---|---|---|---|---|
| 仓库设置 | registry | 下载仓库 | 字符串 | https://ohpm.openharmony.cn/ohpm/ | 支持配置多个仓库地址,以英文逗号分隔。系统将按照配置的先后顺序依次检索这些仓库,直到成功下载目标包。例如:当需要下载包a时,会优先从第一个配置的仓库地址查找,若未找到则自动尝试下一个仓库,依此类推。 |
| @group:registry | 指定仓库 | 字符串 | "" | 根据group指定组织的仓库地址。支持配置多个仓库地址,以英文逗号间隔,且优先级大于registry配置,系统将按照配置的先后顺序依次检索这些仓库,直到成功下载目标包。 | |
| 发布设置 | publish_registry | 发布仓库 | 字符串 | https://ohpm.openharmony.cn/ohpm/ | 配置发布的仓库地址,仅支持配置一个仓库地址。 |
| publish_id | 用户发布号 | 字符串 | "" | 用户发布号,用来发布三方库,全局唯一。 | |
| 路径设置 | cache | 缓存路径 | 字符串 | ~/.ohpm/cache | - |
| key_path | 私钥路径 | 字符串 | "" | 利用ssh-keygen工具生成的私钥的放置路径地址。 | |
| crypto_path | 加密组件路径 | 字符串 | "" | 加密组件路径地址。详情请见:crypto_path。 | |
| 网络设置 | no_proxy | 不使用proxy代理 | 字符串 | "" | 配置不使用代理的仓库地址,可配置多个,以英文逗号间隔;值可以是域名或者ip,支持二级域名通配符*(例如:*.huawei.com)。 |
| http_proxy | http代理 | 字符串 | "" | 支持用户名和密码的网络代理,特殊字符需要转义。示例:http://proxy_server:port、http://username:password@proxy_server:port。 | |
| https_proxy | https代理 | 字符串 | "" | 支持用户名和密码的网络代理,特殊字符需要转义。示例:https://proxy_server:port、http://username:password@proxy_server:port。 | |
| strict_ssl | ssl校验 | 布尔 | true | 默认值为true,校验https证书;若配置为false,则不校验https证书。 | |
| ca_files | ca证书路径 | 字符串 | "" | strict_ssl=true时校验服务端证书需要的ca证书放置路径,可以放置多个证书路径,以英文逗号间隔。详情请见:CA证书获取及配置。 | |
| fetch_timeout | 请求超时时间 | 数值 | 60000 | 取值范围:[10000,360000],单位为毫秒。如果设置的fetch_timeout值不在取值范围内,则默认为:60000。 | |
| 并发设置 | max_concurrent | 最大并发量 | 数值 | 50 | 取值范围:[1, 200],设置每个模块在安装时允许的最大并发量。 |
| retry_times | 出错重试次数 | 数值 | 1 | 取值范围:[0, 5], 针对白名单内的异常,程序会按配置重试指定次数,白名单有:
| |
| retry_interval | 出错重试间隔时间 | 数值 | 1000 | 取值范围:[1000, 60000], 单位毫秒。 | |
| 依赖冲突设置 | resolve_conflict | 开启自动解决依赖版本冲突功能 | 布尔 | true | 默认开启。当设置为true或缺省时,ohpm会自动处理依赖版本冲突,详情请见:resolve_conflict。 |
| resolve_conflict_strict | 开启严格模式依赖冲突处理功能 | 布尔 | false | 默认关闭。当设置为true时,ohpm会按照严格模式处理依赖版本冲突,详情请见:resolve_conflict_strict。 | |
| 安全设置 | key_passphrase | 已加密的私钥密码 | 字符串 | "" | 默认为空,使用加密命令将私钥密码加密,执行涉及公私钥的认证命令时,自动使用key_passphrase对私钥文件进行解密,无需用户手动输入私钥密码。详情请见:key_passphrase。 |
| 其他设置 | log_level | 日志级别 | 字符串 | info | 可设置日志输出级别,对应级别类型有debug、info、warn、error。详情请见:log_level。 |
| install_all | 是否安装工程所有模块的依赖 | 布尔 | true | 默认为true。当设置为true或缺省时,在执行ohpm install、ohpm update、ohpm uninstall时,将会安装工程下所有模块的依赖。详情请见install_all。 | |
| :_auth和:_read_auth | AccessToken配置项 | 字符串 | 无 | ohpm-repo支持使用access token进行认证。详情请见AccessToken。 | |
| enforce_dependency_key | 开启依赖名称校验 | 布尔 | false | 默认为false。设置为true后,ohpm会校验配置的本地依赖名称与其对应的包名是否一致,若不一致会导致命令执行失败。详情请见enforce_dependency_key。 | |
| ensure_dependency_include | 开启依赖扫描功能 | 布尔 | false | 默认为false。从ohpm 1.7.0开始,在执行ohpm publish命令时,会检查发布包的源码中,静态导入的三方依赖是否都声明在oh-package.json5的dependencies或dynamicDependencies中。若缺少依赖声明且字段设置为false时,会提示相应告警信息;设置为true时,则会使命令执行失败并提示错误信息。详情请见ensure_dependency_include。 | |
| projectPackageJson:<project_root> | 工程oh-package.json5配置覆盖 | 字符串 | 无 | 用于覆盖工程根目录下oh-package.json5中的配置。
| |
| disallow_nested_package | 开启包内.har/.tgz依赖 配置路径检测 | 布尔 | false | 默认为false。设置为true后,在执行prepublish/publish时,会扫描包内是否存在'./'形式配置且后缀为.har/.tgz格式的依赖,如果存在,则会使命令执行失败并提示报错信息。详情见disallow_nested_package。 | |
| odm_r2_project_root | 开启overrideDependencyMap中相对路径自动转换功能 | 布尔 | false | 默认为false。设置为true后,当存在overrideDependencyMap配置且其配置项对应的配置文件内存在相对路径的依赖配置时,ohpm会基于工程根路径解析来查找这些相对路径。详情见odm_r2_project_root。 | |
| enable_cross_process_lock | 启用跨进程锁 | 布尔 | false | 默认为false。由于oh_modules目录结构限制,ohpm不支持在同一个工程下并行运行多个ohpm install、ohpm update或ohpm uninstall命令,若需要在同一个工程下执行多个ohpm install、ohpm update或ohpm uninstall命令,则必须将该配置设置为true,以保证这多个命令以串行的方式运行。 | |
| compability_log_level | 兼容性字段检测日志等级 | 字符串 | warn | 默认为warn。在执行prepublish、publish命令时,ohpm会检测oh-package.json5文件中是否配置了兼容性检测需要的所有字段('compatibleSdkVersion', 'compatibleSdkType', 'obfuscated', 'nativeComponents'),如果未配置,则会根据日志等级打印提示或报错。详情请见compability_log_level。 | |
| use_stream_threshold_size | 流式上传阈值 | 数值 | 5 | 取值范围:[0, 300],单位mb。当publish三方库的文件体积大于此阈值时将会使用流式上传三方库,如果仓库不存在流式上传接口则自动转为Base64方式上传。 | |
| lockfile_stable_order | oh-package-lock.json5内容稳定排序 | 布尔 | false | 默认为false。若设置为true,会确保在oh-package.json5文件未变更时,当前已生成的oh-package-lock.json5各字段内容不变。 | |
| enable_unified_lockfile | lockfile合一 | 布尔 | false | 默认为false。若设置为true,会将所有模块的oh-package-lock.json5文件整合进项目下的oh-package-lock.json5。详情请见enable_unified_lockfile。 | |
| enable_boost_extraction_speed | 文件解压提速 | 布尔 | false | 默认为false。若设置为true,在ohpm安装时,会使用更高效的文件解压方法,该功能当前处于实验阶段,详情请见enable_boost_extraction_speed。 | |
| enable_lock_inner_pkg_version | 依赖内部的.har或.tgz依赖版本锁定 | 布尔 | true | 默认为true。若设置为false,在ohpm安装时,不会将依赖内部的.har或.tgz子依赖的版本保存至oh-package-lock.json5,详情请见enable_lock_inner_pkg_version。 | |
| case_sensitive_check | 路径大小写敏感检测 | 布尔 | false | 默认为false。若设置为true,在执行ohpm相关命令时,如果ohpm检测到工程中文件的配置路径和文件的实际路径存在大小写不一致问题时,则会报错提示开发者修改,详情请见case_sensitive_check。 该配置项仅在Windows环境下生效。 | |
| auto_skip_install | 依赖未发生变化时,自动跳过本次安装 | 布尔 | false | 默认为false。若设置为true,首次执行ohpm install安装命令后,如果用户未修改依赖再次执行ohpm install命令,则会跳过本次安装。详细跳过规则请见auto_skip_install。 | |
| metadata_cache_effective | 设置元数据缓存的过期时间 | 数值 | 10080 | 默认缓存过期时间为7天,取值范围为 [1, 525600],单位:分钟。 该配置适用于 ~/.ohpm/cache/metadata 目录下所有先行版本元数据文件和全部版本元数据文件,以及工程目录下 .ohpm/lock/oh-install-meta.json5 中的先行版本元数据。 说明 标准版本通常不会变更,故该参数在~/.ohpm/cache/metadata 目录下的标准版本元数据文件和工程目录下.ohpm/lock/oh-install-meta.json5中的标准版本元数据中不生效。 | |
| metadata_cache | 开启读取缓存的元数据文件 | 布尔 | false | 默认为false。若设置为true,在执行ohpm install命令时,会读取缓存的元数据文件( .ohpm/lock/oh-install-meta.json5文件、~/.ohpm/cache/metadata 目录下文件),减少网络请求,缩短安装时间。详情请见metadata_cache。 | |
| symlink_for_local_dep | 对本地HAR依赖解压后的路径,创建软链接 | 布尔 | false | 默认为false。若设置为true,在执行ohpm install过程中,对本地HAR依赖解压后的路径,创建软链接。详情见symlink_for_local_dep。 |
CA证书的获取需要区分系统:当从Windows系统浏览器下载的证书仅适用于Windows系统,当从Mac系统浏览器中获取的证书适用于Mac系统和Linux系统。
依次访问以下证书下载地址,并根据下图操作下载CA证书到本地:
- https://ohpm.openharmony.cn/
- https://contentcenter-drcn.dbankcdn.cn/ //该域名用于文件资源下载,访问根路径仅可用于获取CA证书
访问https://ohpm.openharmony.cn/地址,下载证书,请选择保存类型为证书链(访问https://contentcenter-drcn.dbankcdn.cn/ 执行相同操作)。

通过访问https://ohpm.openharmony.cn/地址获取证书openharmony.cn.crt,通过访问https://contentcenter-drcn.dbankcdn.cn/地址获取证书update.hicloud.crt,在 .ohpmrc 文件中配置 ca_files=证书路径1,证书路径2(两个文件均需配置)。
- ca_files=D:\_.openharmony.cn.crt,D:\update.hicloud.crt
依次访问以下证书下载地址,并根据下图操作下载CA证书到本地:
- https://ohpm.openharmony.cn/
- https://contentcenter-drcn.dbankcdn.cn/ //该域名用于文件资源下载,访问根路径仅可用于获取CA证书
访问https://ohpm.openharmony.cn/地址,下载证书,请选择保存类型为证书链(访问https://contentcenter-drcn.dbankcdn.cn/ 执行相同操作)。

通过访问https://ohpm.openharmony.cn/地址获取证书openharmony.cn.pem,通过访问https://contentcenter-drcn.dbankcdn.cn/地址获取证书update.hicloud.pem,在 .ohpmrc 文件中配置 ca_files=证书路径1,证书路径2(两个文件均需配置)。
- ca_file=/Users/用户名/_.openharmony.cn.pem,/Users/用户名/_.update.hicloud.pem
可设置ohpm日志输出级别,对应级别类型有debug、info、warn、error,默认为:info。开发者在执行ohpm命令时,不同日志级别的区别和效果如下所示。




在ohpm客户端1.8.0版本的.ohpmrc中支持install_all配置,用于控制ohpm install,ohpm update,ohpm uninstall的行为,install_all在.ohpmrc文件中设置为true或缺省时:
在ohpm客户端1.5.0版本开始支持依赖版本冲突自动解决功能。只需要在.ohpmrc文件中,将resolve_conflict配置为true或缺省,即可开启该功能。依赖冲突的处理策略为:当您的项目同时依赖了某个三方库的不同版本时,ohpm将选择其中的最高版本进行安装。
若某个三方库同时存在远程版本和本地版本(本地文件或源码依赖),无论本地版本的版本号是否大于远程版本,ohpm的冲突处理策略都会优先选择本地版本作为待安装的版本。

如上图所示的依赖路径中,moduleA 为您正在开发的模块,其直接依赖为 B@1.1,C@1.1。其中 B@1.1 与 C@1.1 分别依赖了 D 的两个版本 D@1.2 与 D@1.3。当您开启了依赖版本冲突自动解决功能,ohpm将会选择 D@1.3 版本作为待安装的版本,最终依赖路径被解析为下图蓝色箭头所指向的路径:


如上图所示的依赖路径中,moduleA、moduleB 为您同一项目下正在开发的两个模块,其中moduleA 依赖 B@1.1,moduleB 依赖 C@1.1,B@1.1 与 C@1.1 分别依赖了 D 的两个版本 D@1.2 与 D@1.3。当您开启了依赖版本冲突自动解决功能,并且您是使用 ohpm install --all 进行安装时,ohpm将会选择 D@1.3 版本作为待安装的版本,最终依赖路径被解析为下图蓝色箭头所指向的路径:

当您希望将您某个模块的直接依赖更新成另一个版本,如下图所示,您手动将 C@1.1 更新为 C@1.2:

由于 C 更新为 C@1.2 后,不再依赖 D,若依赖 D 的版本在更新 C 版本之前已经通过 ohpm 的自动冲突处理机制锁定为 D@1.3 版本,此时 C 版本的升级将不会导致 D 的版本由 D@1.3 回退为 D@1.2,这样可以保证每一次更新都只是在上一次结果上进行影响最小的修改,最终的依赖路径将会被解析为下图蓝色箭头所指向的路径:

对于上述场景,如果希望D版本同时也回退至D@1.2版本,则需要在ohpm install之前执行ohpm clean命令清理各模块下的oh-package-lock.json5文件,以消除上一次安装结果的影响。
target_path下是hvigor在构建时根据目标产物target为各模块自动生成定制的依赖配置文件(oh-package.json5),详见target_path。在生成的oh-package.json5中,依赖的版本部分可能包含targetName,示例:"version": "1.0.0+targetName"。
包含targetName信息的版本完整格式为:<major>.<minor>.<patch>[-<pre-release>][+<targetName>],此时冲突处理规则如下:
1、<major>.<minor>.<patch>[-<pre-release>]部分的比较规则依然遵循上文各场景所描述的处理规则,即取版本号最大的依赖。
2、当两个版本<major>.<minor>.<patch>[-<pre-release>]部分一致时,取尾部有[+<targetName>]信息的依赖。
1、当两个版本尾部均有[+<targetName>]信息,且targetName不一致时,会根据<target_path>/dependencyMap.json5中targetName是否为空进行区分处理。
2、当两个依赖中有一个是本地依赖时,优先取本地依赖;当两个依赖均是本地依赖时,获取本地依赖包内oh-package.json5配置的version再次按照上述规则继续比较。
如难以感知本地文件或本地源码依赖中的版本号,建议使用overrides来处理冲突。
ohpm客户端从5.0.9版本,开始支持严格的依赖版本冲突处理机制。在.ohpmrc文件中,将resolve_conflict_strict配置为true开启该功能。
严格模式下,当您的项目同时依赖了某个三方库的不同版本时,ohpm将按照严格模式冲突决策算法决策出最符合要求的版本进行安装,当程序不能决策出符合要求的版本时将报错。

- ohpm config set resolve_conflict_strict true
- {
- "modelVersion": "6.1.1",
- "description": "Please describe the basic information.",
- "dependencies": {
- "@ohos/axios": "2.2.5"
- }
- }
- {
- "name": "entry",
- "version": "1.0.0",
- "description": "Please describe the basic information.",
- "main": "",
- "author": "",
- "license": "",
- "dependencies": {
- "@ohos/axios": "2.2.6"
- }
- }

ohpm客户端从5.2.0版本开始,支持对敏感配置项进行加密存储和读取。
支持加密的敏感配置项:
| 配置项 | 说明 | 示例格式 |
|---|---|---|
| 必须加密,对应 key_path 的私钥密码 | key_passphrase=security:xxx | |
| http_proxy | 代理用户名密码部分可加密(username:password替换为密文) | http_proxy=http://security:xxx@proxy:port |
| https_proxy | 代理用户名密码部分可加密(username:password替换为密文) | https_proxy=https://security:xxx@proxy:port |
| 仓库认证配置(:_auth 和 :_read_auth) | //<仓库地址>/:_auth=security:xxx //<仓库地址>/:_read_auth=security:xxx |
用户可通过以下流程实现配置加密:
- crypto_path=D:\path\to\crypto_dir
- key_passphrase=security:xxx
- http_proxy=http://security:xxx@proxy:port
- https_proxy=https://security:xxx@proxy:port
- //<仓库地址>/:_auth=security:xxx
- //<仓库地址>/:_read_auth=security:xxx
1、key_passphrase 配置项必须使用密文格式配置,其余敏感配置项仍兼容明文配置。
2、命令执行时,根据优先级(项目级 > 用户级 .ohpmrc)获取命令所需的敏感配置项后,使用该配置项同层级的 crypto_path 指定的加密组件进行解密。
ohpm 客户端从5.2.0版本开始,支持在 .ohpmrc 文件中配置 key_passphrase 私钥密码,用于自动解密 key_path 对应的私钥文件。
示例
- key_path=:\path\to\key_file
- crypto_path=D:\path\to\crypto_dir
- key_passphrase=security:xxx
AccessToken是 ohpm-repo 2.1.0版本新引入的认证机制,用户通过ohpm-repo界面生成Token,并将其配置至ohpm客户端配置文件中。
在与 ohpm-repo 交互时,客户端会自动附带Token进行身份验证。该Token分两种权限等级:
每位用户每种权限类型的Token最多可生成10个,首次生成时系统自动复制到剪贴板,后续不再显示完整Token内容。
当前AccessToken仅 ohpm-repo 支持,登录成功后,在ohpm-repo首页的右上角 > 认证管理 > AccessToken页面进行生成。
在".ohpmrc"文件配置示例如下:
- //127.0.0.1:8088/repos/ohpm/:_auth=readWriteToken
- //127.0.0.1:8088/repos/ohpm/:_read_auth=readOnlyToken
其中 :
ohpm从1.7.0版本开始,支持在.ohpmrc文件中配置enforce_dependency_key,该配置项值为布尔类型,默认为false。将配置设置为true后,ohpm会校验各模块的oh-package.json5中配置的直接依赖中的本地依赖名称与其对应的包名(模块名)是否一致,若不一致会导致依赖安装失败并在错误日志中打印出不一致的依赖名称与其对应的包名(模块名)。
示例:
在MyApplication工程下存在一个名称为foo的模块,foo模块的oh-package.json5如下所示:
- {
- "name": "foo",
- "version": "2.0.0",
- "description": "Please describe the basic information.",
- }
在MyApplication工程下存在另一个名称为bar的模块,且bar模块中依赖了foo模块,bar模块的oh-package.json5如下所示:
- {
- "name": "bar",
- "version": "1.0.0",
- "description": "Please describe the basic information.",
- "dependencies": {
- "fee": "file:../foo"
- },
- }
如上所示,bar模块的oh-package.json5中配置了对foo模块的依赖,并为foo模块起了一个别名为fee。当在.ohpmrc中将enforce_dependency_key配置为true时:
- enforce_dependency_key=true
此时在MyApplication下执行ohpm install --all命令将打印如下错误日志,同时会中断命令的执行:
- ohpm ERROR: local dependency "fee" found in "D:\DevecostudioProjects\MyApplication2\bar\oh-package.json5" does not match the actual name "foo" of its oh-package.json5
- ohpm ERROR: Install failed, detail: There are some dependency names that are inconsistent with the actual package names.
若没有配置enforce_dependency_key或将其配置为false时,命令将不会被中断,同时上述错误日志的日志级别将会下调为告警日志:
- ohpm WARN: local dependency "fee" found in "D:\DevecostudioProjects\MyApplication2\bar\oh-package.json5" does not match the actual name "foo" of its oh-package.json5
建议在.ohpmrc文件中配置enforce_dependency_key为true,禁止以别名的方式配置本地依赖,避免出现如下场景:
基于上述示例,在MyApplication下真的存在一个名称为fee的模块,且该模块的版本号小于foo模块,fee模块的oh-package.json5如下所示:
- {
- "name": "fee",
- "version": "1.0.0", // 小于foo的版本号2.0.0
- "description": "Please describe the basic information.",
- }
且entry模块中同时依赖了fee与bar,entry模块的oh-package.json5依赖配置如下所示:
- {
- "name": "entry",
- "version": "1.0.0",
- "dependencies": {
- "fee": "file:../fee",
- "bar": "file:../bar"
- },
- }
此时在entry的依赖树中,依赖fee存在两个版本:一个别名为fee的foo模块,一个名称为fee的fee模块,若此时开启了resolve_conflict,由于fee模块的实际版本号为1.0.0要小于foo模块的版本号2.0.0,在执行ohpm install时将只会在entry模块的oh_modules下安装以fee为别名的foo模块,而实际的fee模块则不会被安装,如下图所示:

在entry的oh_modules下会生成一个名称为fee的软链接,该链接却指向foo模块的实际路径:

如果entry实际希望依赖的是真实的fee模块而不是foo模块,则此时会导致entry无法编译成功。
1、从ohpm客户端5.0.7开始,若项目级build-profile.json5文件中strictMode字段下配置了useNormalizedOHMUrl开关且useNormalizedOHMUrl=true,则该配置优先级高于enforce_dependency_key,如果ohpm检测到依赖别名与oh-package.json5中name不一致时,会报错提示并中止程序执行;若未配置useNormalizedOHMUrl或useNormalizedOHMUrl=false时,是否校验别名一致性则根据enforce_dependency_key配置决定。
2、项目级build-profile.json5文件中,products节点下任意product字段配置了useNormalizedOHMUrl=true,则ohpm中useNormalizedOHMUrl开关会被设置为true,即ohpm检测到项目中依赖别名与oh-package.json5中name不一致时,会报错提示并中止程序执行。
ohpm从1.7.0版本开始,支持在.ohpmrc文件中配置ensure_dependency_include,该配置项值为布尔类型,默认为false。
在ohpm prepublish/publish时,ohpm会扫描待发布包的内容,如果代码中import了某个包的内容,但相应的包没有配置在dependencies/dynamicDependencies中,即如果该配置项的值为true,则ohpm会打印错误信息并中断执行;否则,ohpm只会打印告警提示。
例如,test.har包的代码中import了@ohos/hypium包,但test.har的oh-package.json5的dependencies中未配置@ohos/hypium依赖。下面就ensure_dependency_include开关为true/false时ohpm publish的行为进行举例说明。
- ohpm config set ensure_dependency_include false
- ohpm publish test.har

- ohpm config set ensure_dependency_include true
- ohpm publish test.har

ohpm从1.8.0版本开始,支持在.ohpmrc文件中配置disallow_nested_package,该配置项值为布尔类型,默认为false。在ohpm prepublish/publish时,ohpm会扫描待发布包的dependencies和dynamicDependencies依赖配置,如果依赖配置中存在相对路径或绝对路径配置的.har、.tgz依赖且disallow_nested_package开关为true,则ohpm会报错提示。
- {
- "dependencies": {
- "liblib_nested.so": "file:./src/main/cpp/types/liblib_nested",
- "hsp": "./libs/hsp-default.tgz",
- "lib_har": "./libs/lib_har.har"
- }
- }
- ohpm config set disallow_nested_package true
- ohpm publish lib_nested.har

odm_r2_project_root是ohpm客户端1.8.0新增的开关配置,默认为false,可以通过config命令或直接在.ohpmrc文件中修改其值。
当该配置为true时,若在overrideDependencyMap中配置的依赖项替换文件中存在以相对路径配置的本地依赖项时,在ohpm运行时会基于工程根路径来查找这些本地依赖项。
示例:
- odm_r2_project_root=true
- {
- "overrideDependencyMap": {
- "lib1": "lib1-override-dep-map.json5",
- "lib2": "lib2-override-dep-map.json5"
- }
- }
- {
- "dependencies": {
- "@ohos/test": "file:./test.har"
- }
- }
如上第3步所示,当odm_r2_project_root开关设置为true时,在ohpm运行时会以工程根目录为起点查找"./test.har",比如:工程根路径为:D:\path\to\MyProject,在ohpm运行时解析得到test.har的绝对路径为:D:\path\to\MyProject\test.har。
ohpm客户端从5.0.1开始新增开关配置'compability_log_level'字段,用于控制在缺少兼容性检测需要的字段时ohpm的处理逻辑。
compability_log_level字段默认赋值为'warn',可配置的日志等级请见开关配置项说明。
在执行prepublish、publish命令时,ohpm会检测oh-package.json5文件中是否配置了兼容性检测需要的所有字段('compatibleSdkVersion', 'compatibleSdkType', 'obfuscated', 'nativeComponents'),详见模块级oh-package.json5字段说明,下面统称 '兼容性字段',如果未配置,则会根据日志等级打印提示或报错。
ohpm客户端从5.1.1开始新增开关配置enable_unified_lockfile字段。启用此特性后,ohpm将自动整合项目中所有子模块的oh-package-lock.json5文件,统一生成至项目根目录的oh-package-lock.json5文件中。
启用enable_unified_lockfile=true后,项目级统一管理lockfile锁文件,针对模块间存在重复依赖的场景,显著减少ohpm install耗时,优化构建流程。
启用enable_unified_lockfile=true后,原分散在各模块下的.hsp依赖安装目录将统一迁移至项目根目录。在流水线上开启此特性时,需搭配配套的hvigor使用。
ohpm客户端从5.3.0开始新增开关配置enable_boost_extraction_speed字段。ohpm安装时涉及对.har/.tgz三方包文件的解压和遍历,启用此特性后,将使用高性能方法进行解压和遍历,当工程中存在大文件依赖时,可以显著减少ohpm install耗时。该功能当前处于实验阶段,暂不支持解压包含软链接的三方包文件。
ohpm客户端从5.3.1开始新增开关配置enable_lock_inner_pkg_version字段。默认为true,若设置为false,在ohpm安装时,不会将依赖内部的.har或.tgz子依赖的版本保存至oh-package-lock.json5,以防oh-package-lock.json5中保存不存在的路径导致二次安装报错。
如下图所示,蓝色箭头标识最终要安装的依赖,安装的依赖D@1.0.0来自依赖B@1.0.0(依赖名称和依赖版本相同的依赖会被定性为相同依赖,最终安装哪个由依赖构建先后顺序决定), 因B@1.0.0并没有安装,但oh-package-lock.json5中锁定了依赖D的版本,在二次安装时会爆出D的依赖路径不存在错误,此时需要将该开关设置为false。

oh-package-lock.json5示例
- {
- "name": "library",
- "version": "1.0.0",
- "description": "Please describe the basic information.",
- "author": "",
- "license": "Apache-2.0",
- "dependencies": {
- "inner": "./libs/inner.har"
- },
- "types": "Index.d.ets",
- "artifactType": "obfuscation",
- "compatibleSdkVersion": 21,
- "compatibleSdkType": "HarmonyOS",
- "obfuscated": false
- }
- {
- "name": "entry",
- "version": "1.0.0",
- "description": "Please describe the basic information.",
- "main": "",
- "author": "",
- "license": "",
- "dependencies": {
- "library": "./library.har"
- }
- }
- {
- ......
- "specifiers": {
- "library@library.har": "library@library.har"
- },
- "packages": {
- "library@library.har": {
- "name": "library",
- "version": "1.0.0",
-
- "resolved": "library.har",
- "registryType": "local",
- "dependencies": {
- "inner": "./libs/inner.har"
- }
- }
- }
- }
enable_lock_inner_pkg_version=true时,entry/oh-package-lock.json5结果如下:
- {
- ......
- "specifiers": {
- "inner@../oh_modules/.ohpm/library@85ursk4cfzbgycewlyxweed+cyyeeixxig5mlazoo+g=/oh_modules/library/libs/inner.har": "
- inner@../oh_modules/.ohpm/library@c0jkxsxl3amvdd7rr1enrkrejzharxwucdoyc29br+u=/oh_modules/library/libs/inner.har",
- "library@library.har": "library@library.har"
- },
- "packages": {
- "
- inner@../oh_modules/.ohpm/library@c0jkxsxl3amvdd7rr1enrkrejzharxwucdoyc29br+u=/oh_modules/library/libs/inner.har
- ": {
- "name": "inner",
- "version": "1.0.0",
- "resolved": "../oh_modules/.ohpm/library@c0jkxsxl3amvdd7rr1enrkrejzharxwucdoyc29br+u=/oh_modules/library/libs/inner.har"
- "registryType": "local"
- },
- "library@library.har": {
- "name": "library",
- "version": "1.0.0",
- "resolved": "library.har"
- "registryType": "local",
- "dependencies": {
- "inner": "./libs/inner.har"
- }
- }
- }
- }
ohpm客户端从6.21.0新增开关配置"case_sensitive_check"字段。若设置为true,在执行ohpm相关命令时,如果ohpm检测到工程中文件的配置路径和文件的实际路径存在大小写不一致问题时,则会报错提示开发者修改。该配置项仅在Windows环境下生效。
检测范围
示例
- {
- "name": "entry",
- "version": "1.0.0",
- "description": "Please describe the basic information.",
- "dependencies": {
- "test": "./Libs/test.har"
- }
- }
ohpm客户端从26.0.0.410新增开关配置auto_skip_install字段,该配置项值为布尔类型,默认为false。设置为true时,首次执行ohpm install安装命令后,再次执行ohpm install命令时会检测依赖是否发生变化,若依赖未发生变化则跳过本次安装。
检测范围
示例
- {
- "name": "entry",
- "version": "1.0.0",
- "description": "Please describe the basic information.",
- "main": "",
- "author": "",
- "license": "",
- "dependencies": {
- "test": "1.0.0"
- }
- }
- ohpm WARN: project dependency not change,skip install
- install completed in 0s 29ms
- {
- "modelVersion": "26.0.0",
- "description": "Please describe the basic information.",
- "parameterFile": "./parameterFile.json",
- "overrides": {
- "test": "@param:dependencies.test"
- }
- }
- {
- "version": "1.0.0",
- "dependencies": {
- "test": "1.0.1"
- }
- }
- ohpm WARN: fingerprint rootNodesFingerprint changed
- ohpm WARN: fingerprint old: 34f4ab8795166b45c388b44803b3bb44
- ohpm WARN: fingerprint new: 68fea7ec8dd32e6375b52ef44a0914ef
- ohpm INFO: MetaDataFetcher fetching meta info of package 'test' from https://ohpm.openharmony.cn/ohpm/
- ohpm INFO: fetch meta info of package 'test' success https://ohpm.openharmony.cn/ohpm/test
- ohpm INFO: fetch package done 1 test from https://ohpm.openharmony.cn/ohpm/test/-/test-1.0.1.har
- install completed in 1s 217ms
ohpm客户端从26.0.0.410版本新增开关配置metadata_cache字段,该配置项值为布尔类型,默认为false。若设置metadata_cache为false,执行ohpm install时,仅加载oh-package-lock.json5文件中缓存的元数据。若设置 metadata_cache为true,执行ohpm install时,将按照如下优先级加载缓存的元数据:oh-package-lock.json5文件 > oh-install-meta.json5文件 > ~/.ohpm/cache/metadata/。
开启metadata_cache开关,执行ohpm install后会生成oh-install-meta.json5文件和元数据缓存文件,存放位置如下:
- ~/project
- .ohpm/
- lock/
- oh-install-meta.json // 项目中所有oh-package-lock.json5文件中packages对象内远程包的集合镜像
- ~/.ohpm/cache/
- metadata/
- group/
- packagenameA/
- -- all.json // 全部元数据
- -- xx.json // 固定版本的元数据,xx为版本号
- packagenameB/
- -- xx.json // 固定版本的元数据
- packagenameC/
- -- all.json // 全部元数据
- -- xx.json // 固定版本的元数据
启用metadata_cache设置为true,当oh-package.json5中配置范围版本,且范围版本中有新版本发布时,ohpm可能从本地缓存的元数据中读取结果,而非发起网络请求。这可能导致无法获取新的包版本。这时需要执行 ohpm cache clean @group/package 命令清除对应包的元数据缓存文件,或执行 ohpm cache clean 命令清除所有元数据缓存文件。清除命令请参考ohpm cache clean。
ohpm客户端从26.0.0.630版本新增开关配置symlink_for_local_dep字段,该配置项值为布尔类型,默认为false。若设置symlink_for_local_dep为true,执行ohpm install过程中,对本地HAR依赖解压后的路径创建软链接,放置在工程目录/oh_modules/.ohpm/oh_modules中。
- {
- "modelVersion": "6.1.0",
- "description": "Please describe the basic information.",
- "dependencies": {
- "library5": "file:./library5.har"
- }
- }
创建的软链接如下:
