HarmonyOS应用开发实战:小事记 - oh-package.json5 依赖管理:@ohos 与 @kit 的模块化演进
前言HarmonyOS 的依赖管理系统经历了从ohos原生模块到kitKit 化模块的重大演进。oh-package.json5作为项目的依赖声明文件管理着从测试框架到业务库的所有三方依赖。理解ohos与kit的模块化设计理念、依赖版本管理策略和多模块工程的依赖配置是构建维护性良好的 HarmonyOS 应用的基石。本文以小事记xiaoshiji_ohos_app 的oh-package.json5和oh-package-lock.json5为切入点深入解析 HarmonyOS 的依赖管理机制。本文参考 HarmonyOS 官方文档application-package-dev.md 和 application-package-fundamentals.md。一、oh-package.json5 的作用1.1 配置文件的作用域HarmonyOS 工程中可能存在多个oh-package.json5文件各自负责不同范围的依赖管理作用域配置文件位置管理范围生效范围工程级工程根目录所有模块共享的依赖全局模块级各模块入口目录该模块的依赖模块内小事记的依赖配置分别位于// 工程级 — 根目录 oh-package.json5 { modelVersion: 6.0.2, description: Please describe the basic information., dependencies: { }, devDependencies: { ohos/hypium: 1.0.25, ohos/hamock: 1.0.0 } }// 模块级 — entry/oh-package.json5 { name: entry, version: 1.0.0, description: Please describe the basic information., main: , author: , license: , dependencies: {} }1.2 关键字段说明字段说明小事记中的值name模块名称在发布时使用entryversion模块版本遵循语义化版本1.0.0description模块描述Please describe the basic information.main入口文件路径未使用dependencies运行时依赖{}devDependencies开发时依赖ohos/hypium,ohos/hamock二、ohos 与 kit 的模块化演进2.1 演进背景从 API 12 开始HarmonyOS 引入了Kit 化模块kit/xxx来替代分散的ohos/xxx原生模块。这一变化的核心目的是按场景聚合— 将相关功能的模块聚合到同一个 Kit 中减少导入路径的记忆成本版本对齐— 同一 Kit 内的模块版本号一致避免版本兼容性问题按需引入— 开发者只需引入需要的 Kit系统自动按需加载模块2.2 ohos 时代 vs kit 时代对比维度ohos 时代kit 时代导入示例import { UIAbility } from ohos.ability.abilityLifecycleimport { UIAbility } from kit.AbilityKit模块粒度细粒度每个功能一个模块粗粒度按场景聚合版本管理各模块独立版本号Kit 内版本号统一导入路径分散需要记忆多个路径集中一个 Kit 覆盖多个功能2.3 小事记中的 Kit 化导入小事记项目使用了 Kit 化导入方式// 使用 kit 导入推荐方式 import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from kit.AbilityKit; import { hilog } from kit.PerformanceAnalysisKit; import { window } from kit.ArkUI; import { BackupExtensionAbility, BundleVersion } from kit.CoreFileKit;Kit 与对应功能的映射关系Kit 名称包含的功能替代的 ohos 模块kit.AbilityKitUIAbility、Want、Configuration、AbilityConstantohos.ability.abilityLifecycle、ohos.ability.wantkit.ArkUIwindow、UIContext、动画、弹框ohos.arkui.window、ohos.arkui.animationkit.CoreFileKit文件操作、备份扩展ohos.file.fs、ohos.file.backupkit.PerformanceAnalysisKithilog、hiTrace、性能监控ohos.hilog、ohos.hiTracekit.DataKitpreferences、relationalStoreohos.data.preferences、ohos.data.relationalStore提示在 API 12 及以上版本推荐使用kit/xxx方式导入。如果项目中仍在 importohos/xxx建议迁移到 Kit 化导入方式。三、依赖类型详解3.1 dependencies 与 devDependencies依赖类型安装时机是否包含在构建产物中用途dependencies编译 运行时✅业务逻辑依赖devDependencies仅编译时❌测试框架、构建工具{ dependencies: { ohos/axios: 1.0.0, // 网络请求库 ohos/router: 2.0.0 // 路由库 }, devDependencies: { ohos/hypium: 1.0.25, // 单元测试框架 ohos/hamock: 1.0.0, // Mock 测试框架 ohos/hvigor: 5.0.0 // 构建工具 } }3.2 依赖的版本号格式格式含义示例1.0.0精确版本只安装1.0.0^1.0.0兼容版本安装1.x.x中最新版~1.0.0近似版本安装1.0.x中最新版file:../path本地路径引用引用本地模块https://xxx.tgz远程包引用引用远程仓库的包3.3 依赖的来源HarmonyOS 的依赖可以来自以下来源OHPM 仓库默认—https://repo.harmonyos.com/ohpm/本地文件系统— 通过file:协议引用Git 仓库— 通过git:协议引用远程 TGZ 包— 通过 HTTP/HTTPS URL 引用{ dependencies: { // OHPM 仓库 ohos/hypium: 1.0.25, // 本地文件系统 xiaoshiji/common: file:../hsp_common, // Git 仓库 xiaoshiji/utils: git:https://gitcode.com/xiaoshiji/utils.git#v1.0.0, // 远程 TGZ 包 xiaoshiji/analytics: https://cdn.example.com/analytics-1.0.0.tgz } }四、oh-package-lock.json5 锁文件4.1 锁文件的作用oh-package-lock.json5是依赖的锁定文件记录了所有依赖的精确版本和完整性校验信息// oh-package-lock.json5部分内容 { lockfileVersion: 1.0, packages: { ohos/hypium: { version: 1.0.25, resolved: https://repo.harmonyos.com/ohpm/ohos/hypium/-/1.0.25.tgz, integrity: sha512-xxxxxxxxxxxxxxxxxxxxx }, ohos/hamock: { version: 1.0.0, resolved: https://repo.harmonyos.com/ohpm/ohos/hamock/-/1.0.0.tgz, integrity: sha512-yyyyyyyyyyyyyyyyyyyy } } }4.2 锁文件的管理场景锁文件的行为建议首次安装依赖自动生成oh-package-lock.json5提交到版本控制新增依赖锁文件自动更新提交更新后的锁文件更新依赖版本执行ohpm update后锁文件更新提交更新后的锁文件团队协作拉取代码后执行ohpm install确保锁文件一致提示oh-package-lock.json5必须提交到版本控制Git确保团队成员和 CI/CD 环境使用完全一致的依赖版本。五、ohpm 包管理工具5.1 常用命令命令说明示例ohpm init初始化项目ohpm initohpm install安装所有依赖ohpm installohpm install package安装指定包ohpm install ohos/axiosohpm install -D package安装开发依赖ohpm install -D ohos/hypiumohpm update更新所有依赖ohpm updateohpm uninstall package卸载指定包ohpm uninstall ohos/axiosohpm list列出所有依赖ohpm list --depth15.2 安装依赖的流程ohpm install ↓ 读取 oh-package.json5 ↓ 检查 oh-package-lock.json5 ├── 存在 → 根据锁文件中的精确版本安装 └── 不存在 → 从 OHPM 仓库获取最新兼容版本 ↓ 下载依赖到 oh_modules/ 目录 ↓ 生成更新后的 oh-package-lock.json5 ↓ 依赖安装完成5.3 离线安装在无网络环境的开发设备上可以预先下载依赖包并离线安装# 在有网络的机器上预先下载 ohpm install --offline-prepare # 复制 oh_modules/ 目录到无网络设备 # 在无网络设备上执行 ohpm install --offline六、依赖管理的最佳实践6.1 依赖版本锁定策略场景版本号格式理由三方库精确版本1.0.25避免意外升级引入不兼容变更内部库精确版本1.0.0确保团队使用一致版本开发依赖精确版本1.0.25避免测试框架版本不一致测试版库精确版本1.0.0-beta明确表示非稳定版本6.2 依赖冲突处理当多个模块依赖同一库的不同版本时可能发生依赖冲突// 模块 A 依赖 ohos/axios 1.0.0 // 模块 B 依赖 ohos/axios 2.0.0 // 冲突无法同时安装两个版本 // 解决方案在工程级 oh-package.json5 中统一版本 { dependencies: { ohos/axios: 2.0.0 // 强制使用 2.0.0 } }6.3 依赖瘦身策略减少的包体积实施方式移除未使用的依赖10%-30%定期审查oh-package.json5使用devDependencies5%-10%将测试框架移入开发依赖使用 HSP 共享15%-40%将公共依赖抽取为 HSP按需导入5%-15%仅导入需要的模块而非整个 Kit七、oh_modules 目录结构7.1 目录结构安装依赖后oh_modules目录下存储了所有依赖包oh_modules/ ├── .ohpm/ │ ├── ohoshamock1.0.0/ │ │ └── oh_modules/ │ ├── ohoshypium1.0.25/ │ │ └── oh_modules/ │ └── lock.json5 ├── ohos/ │ ├── hamock/ │ └── hypium/7.2 .ohpm 目录的作用.ohpm目录是 OHPM 的内部缓存目录存储了依赖包的元数据和锁信息// oh_modules/.ohpm/lock.json5 { lockfileVersion: 1.0, packages: { ohos/hypium: { version: 1.0.25, resolved: https://repo.harmonyos.com/ohpm/ohos/hypium/-/1.0.25.tgz } } }八、依赖的发布与消费8.1 发布到 OHPM 仓库如果开发了自己的公共库可以发布到 OHPM 仓库# 在库的根目录执行 ohpm publish # 发布私有库到私有仓库 ohpm publish --registry https://private-repo.example.com/ohpm/8.2 依赖的版本管理oh-package.json5中的version字段遵循语义化版本规范SemVer版本变更示例说明主版本1.0.0→2.0.0不兼容的 API 变更次版本1.0.0→1.1.0向下兼容的新功能补丁版本1.0.0→1.0.1向下兼容的 Bug 修复九、实际项目中的依赖演进9.1 小事记当前的依赖状态小事记当前依赖非常精简运行时依赖无所有功能使用系统内置模块开发依赖ohos/hypium单元测试、ohos/hamockMock 测试9.2 依赖的演进路径阶段新增依赖原因阶段一当前无运行时依赖原型验证阶段使用系统 API阶段二ohos/axios需要网络请求能力阶段三自定义 HSP 共享包多模块共享代码阶段四三方 UI 组件库提升开发效率9.3 为小事记添加网络请求依赖// 添加网络请求库 { dependencies: { ohos/axios: 1.0.0 } }// 使用 axios 发送网络请求 import { axios } from ohos/axios; async function fetchData() { try { const response await axios.get(https://api.example.com/events); return response.data; } catch (err) { console.error(请求失败: ${err.message}); throw err; } }十、与 npm 和 Gradle 的对比10.1 版本管理对比对比维度ohpmnpmGradle配置文件oh-package.json5package.jsonbuild.gradle锁文件oh-package-lock.json5package-lock.json无依赖解析依赖目录oh_modules/node_modules/~/.gradle/caches/版本格式^1.0.0^1.0.01.0.0包注册表OHPM 仓库npmjs.orgMaven Central10.2 依赖管理命令对比操作ohpmnpmGradle初始化ohpm initnpm init自动生成安装ohpm installnpm installgradle build添加依赖ohpm install pkgnpm install pkg编辑build.gradle更新ohpm updatenpm updategradle refresh卸载ohpm uninstall pkgnpm uninstall pkg编辑build.gradle总结本文从xiaoshiji_ohos_app项目的依赖配置文件出发深入解析了 HarmonyOS 的oh-package.json5 依赖管理机制。核心要点如下双层配置工程级oh-package.json5管理全局依赖模块级oh-package.json5管理模块特有依赖两者形成层级结构ohos 到 kit 的演进Kit 化模块按场景聚合功能减少导入路径记忆成本版本号统一管理依赖类型dependencies为运行时依赖devDependencies为开发时依赖两者的区别决定了是否包含在构建产物中锁文件管理oh-package-lock.json5锁定精确版本必须提交到版本控制确保构建的一致性版本锁定推荐使用精确版本号避免意外升级引入不兼容变更至此模块一工程架构与 Stage 模型的 8 篇文章全部完成。下一篇文章将进入模块二UIAbility 与窗口管理深入解析 UIAbility 的冷启动/热启动/后台启动三种场景与launchParam解析。如果这篇文章对你有帮助欢迎点赞、收藏⭐、关注你的支持是我持续创作的动力相关资源小事记项目源码xiaoshiji_ohos_app官方文档 - 包开发application-package-dev.md官方文档 - 包基础application-package-fundamentals.md官方文档 - 包结构application-package-structure-stage.md官方文档 - 包概览application-package-overview.md官方文档 - OHPM 使用ohpm-guide官方文档 - 应用模型application-models.md开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net

相关新闻

HarmonyOS应用开发实战:小事记 - 应用包结构:HAP/HSP/HAR 的三层架构与 deliveryWithInstall 策略

HarmonyOS应用开发实战:小事记 - 应用包结构:HAP/HSP/HAR 的三层架构与 deliveryWithInstall 策略

前言 HarmonyOS 的应用包结构采用了分层模块化设计,将代码和资源组织为 HAP(HarmonyOS Ability Package)、HSP(HarmonyOS Shared Package)和 HAR(HarmonyOS Archive)三种包格式。这种设计使得应…

2026/10/14 5:40:28 阅读更多 →
HarmonyOS应用开发实战:小事记 - Stage 模型下 EntryAbility 的启动流程与 Want 解析机制

HarmonyOS应用开发实战:小事记 - Stage 模型下 EntryAbility 的启动流程与 Want 解析机制

前言 HarmonyOS 从 API 9 开始全面推行 Stage 模型,替代了早期版本的 FA(Feature Ability)模型。Stage 模型的核心设计理念是将组件生命周期、窗口管理和任务调度三者解耦,为应用提供更精细化的控制能力。本文基于 小事记&#x…

2026/10/3 16:23:07 阅读更多 →
Duix.Avatar完整教程:从零开始构建专业级AI数字人克隆系统

Duix.Avatar完整教程:从零开始构建专业级AI数字人克隆系统

Duix.Avatar完整教程:从零开始构建专业级AI数字人克隆系统 【免费下载链接】Duix-Avatar 🚀 Truly open-source AI avatar(digital human) toolkit for offline video generation and digital human cloning. 项目地址: https://gitcode.com/GitHub_Tr…

2026/10/8 5:07:26 阅读更多 →

最新新闻

Redis缓存设计与性能优化:穿透、击穿、雪崩及一致性实战

Redis缓存设计与性能优化:穿透、击穿、雪崩及一致性实战

做后端这几年,凡是线上Redis出问题,十有八九都是缓存设计阶段埋的雷。要么是缓存穿透直接打爆数据库,要么是热key把单节点CPU跑满,再要么就是一批key同时过期,后端服务瞬间卡死。今天这篇不聊Redis命令手册&#xff0c…

2026/10/14 5:40:16 阅读更多 →
品牌权益评估框架:从消费者行为到估值模型的完整指南

品牌权益评估框架:从消费者行为到估值模型的完整指南

在投资圈待久了,你会发现一个经常被忽略的问题:大家聊估值聊得头头是道,但很少人能把“品牌”这件事讲清楚。我前些年研究某位传奇投资经理的案例集时,印象最深的一点,就是他评估一家公司时,会把品牌权益放…

2026/10/14 5:40:16 阅读更多 →
JavaScript 严格相等 API:解决 NaN、-0 与深比较的终极方案

JavaScript 严格相等 API:解决 NaN、-0 与深比较的终极方案

先给结论:NaN和NaN用比较是false,这不是 bug,而是浮点标准里“NaN 不等于任何值包括自身”的规则。但到了业务代码里,这条规则就非常折磨人。我前阵子写一个同步缓存模块,拿新旧配置做比较,只要配置里包含N…

2026/10/14 5:40:15 阅读更多 →
Claude+Codex+Grok:三模型协作工作流实战指南

Claude+Codex+Grok:三模型协作工作流实战指南

最近我把常用的几个AI模型放进同一条工作流里,连续试了几周,得出的结论就一句:Claude Codex Grok,就是王炸。这三个名字放在一起,乍看是三套完全独立的工具,但它们组合起来之后互补得特别自然。Claude 擅…

2026/10/14 5:40:15 阅读更多 →
C# U2Net离线抠像完整教程:ONNX模型推理与透明背景生成

C# U2Net离线抠像完整教程:ONNX模型推理与透明背景生成

简介:一套基于C#与U2NET深度学习模型的图片抠像工程,面向需要无绿幕前景分离的桌面应用开发者和图像处理工程师。U2NET通过大量图像数据学习前景识别能力,能从复杂背景中自动分离目标,无需传统绿幕,减少了后期对背景的…

2026/10/14 5:40:15 阅读更多 →
考虑产销者的分布式储能容量配置:Matlab MILP建模与实战

考虑产销者的分布式储能容量配置:Matlab MILP建模与实战

做分布式储能项目,绕不开“容量配置”这道坎。尤其当服务对象是产销者(Prosumer)——就是自己屋顶有光伏、同时本身又在用电的用户或园区——这个问题会比单纯削峰填谷复杂不少:光伏出力、负荷波动、分时电价、储能投资成本、电池…

2026/10/14 5:39:15 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →