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/7/20 16:34:16阅读更多 →
HarmonyOS应用开发实战:小事记 - Stage 模型下 EntryAbility 的启动流程与 Want 解析机制

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

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

2026/7/20 16:34:16阅读更多 →
小米(南京)业务中台技术专家 / AI Agent 中台技术主管

小米(南京)业务中台技术专家 / AI Agent 中台技术主管

小米「AI Agent 中台技术主管」岗位 面试全案 岗位:小米(南京)业务中台技术专家 / AI Agent 中台技术主管 候选人:10 年大厂经验,阿里 5 年 + 字节 5 年,AI Agent 架构师 / 后端 & 大数据专家 编制日期:2026-07-18 文档结构:开场自我介绍 → 跳槽原因深度思考 → …

2026/7/20 16:34:16阅读更多 →
Spring Boot整合RabbitMQ:消息队列实战与性能优化

Spring Boot整合RabbitMQ:消息队列实战与性能优化

1. 项目概述:为什么选择Spring Boot整合RabbitMQ?消息队列作为分布式系统解耦的利器,已经成为现代Java开发的标配组件。而Spring Boot与RabbitMQ的组合,就像咖啡与奶泡的完美搭配——前者提供了便捷的开发脚手架,后者则…

2026/7/21 8:59:17阅读更多 →
时序紊乱、断星失准、合规难落地? 时统设备一站式解决全行业授时难题

时序紊乱、断星失准、合规难落地? 时统设备一站式解决全行业授时难题

一、行业普遍授时痛点及深层成因 当下工业自动化、通信、无线电监测、广电、计量测试等关键领域,均高度依赖统一高精度时间基准,但大量项目现场长期受时序故障困扰,核心痛点与根源分为五大类: 痛点 1:单一卫星参考源脆…

2026/7/21 8:59:17阅读更多 →
廖雪峰的GIT教程的笔记

廖雪峰的GIT教程的笔记

学习目标:新公司需要Git进行版本管理学习加记录;首先要安装Git这个百度这里就不讲;学习内容:一、建立仓库仓库就是保存你上传文件的地方,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起…

2026/7/21 8:59:17阅读更多 →
HTML基础与实战:从标签到语义化开发

HTML基础与实战:从标签到语义化开发

1. HTML基础概念解析HTML(HyperText Markup Language)作为构建网页的基础语言,其核心功能在于定义文档的结构和内容。不同于CSS负责样式或JavaScript实现交互,HTML专注于内容的语义化组织。这种分工明确的架构使得Web开发能够保持…

2026/7/21 8:59:17阅读更多 →
Zepp Life自动刷步数终极指南:如何轻松实现健康数据管理

Zepp Life自动刷步数终极指南:如何轻松实现健康数据管理

Zepp Life自动刷步数终极指南:如何轻松实现健康数据管理 【免费下载链接】mimotion 小米运动刷步数(微信支付宝)支持邮箱登录 项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion 你是否厌倦了每天手动记录步数的繁琐&#xff1…

2026/7/21 8:59:17阅读更多 →
DevC++ 64位OpenGL环境配置:MinGW-w64与FreeGLUT实战指南

DevC++ 64位OpenGL环境配置:MinGW-w64与FreeGLUT实战指南

1. 项目概述:为什么要在DevC上折腾64位OpenGL? 如果你是一个刚开始接触计算机图形学,或者想用C写点带窗口和3D效果小程序的初学者,OpenGL几乎是绕不开的名字。但很多朋友,包括当年的我,在第一步“搭环境”上…

2026/7/21 8:57:17阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →