当前位置: 首页 > news >正文

React Native for OpenHarmony:项目目录结构与跨平台构建流程详解

项目目录结构与跨平台构建流程详解

    • 图1:React 项目根目录结构
    • 图2:执行打包命令 `npm run harmony`
      • 打包过程解析:
    • 图3:正在编辑的 `App.tsx` 源码
      • 关键点:
    • 图4:打包产物生成位置
    • 图5:鸿蒙工程中的目录映射关系
      • “一一对应”含义:
    • 图6:鸿蒙侧代码 —— 仅作为“架子”
      • 核心说明:
    • 总结:完整工作流

在 React Native for OpenHarmony(RN4OH)开发模式中,开发者使用熟悉的 React 语法编写 UI 逻辑,再通过专用工具将其打包为 OpenHarmony 可识别的 JavaScript Bundle,最终由鸿蒙原生应用加载运行。本文将结合6 张真实项目截图,逐步拆解这一“前端写代码 → 鸿蒙跑应用”的完整链路。


图1:React 项目根目录结构

这是典型的 React Native 项目根目录。关键特征包括:

  • App.tsx:主入口组件文件,所有页面逻辑在此定义。
  • package.json:包含项目依赖与脚本命令,其中scripts.harmony是核心。
  • harmony/目录非标准 RN 目录,是为 OpenHarmony 平台预留的输出目标路径(通常由脚手架生成)。
  • 无 Android/iOS 文件夹:表明该项目专为 OpenHarmony 构建,不兼容传统移动端。

✅ 开发者在此目录下完成全部业务开发,无需接触 ArkTS 或 DevEco Studio。


图2:执行打包命令npm run harmony

在项目根目录下执行:

npmrun harmony

该命令会触发package.json中定义的脚本:

{"scripts":{"harmony":"react-native bundle-harmony --dev"}}

打包过程解析:

  1. 启动 RN4OH 定制打包器bundle-harmony
  2. 读取App.tsx及其依赖
  3. 编译 JSX/TSX 为纯 JavaScript
  4. 内联小型资源,外置大文件至assets/
  5. 输出产物到预设路径

⚠️ 注意:必须在项目根目录执行,否则无法找到App.tsx入口。


图3:正在编辑的App.tsx源码

开发者在此文件中编写 React 组件代码,例如:

function App() { return ( <View> <Text>欢迎 VON</Text> <Text>使用 React Native for OpenHarmony</Text> </View> ); }

关键点:

  • 使用ViewText等组件,来自@ohos/react-native
  • 所有样式、事件、状态管理均采用标准 React 方式
  • 每次修改后必须重新执行npm run harmony才能生效(图中红框提示)

💡 此文件是唯一需要开发者关注的业务代码入口


图4:打包产物生成位置

打包成功后,终端显示:

[CREATED] ./harmony/entry/src/main/resources/rawfile/bundle.harmony.js info Copied 6 assets

产物路径为:

./harmony/entry/src/main/resources/rawfile/ ├── bundle.harmony.js ← 主 JS Bundle └── assets/ ← 静态资源(图片等)

✅ 这正是 OpenHarmony 应用读取 JS 代码的标准位置(rawfile目录)。


图5:鸿蒙工程中的目录映射关系

如图所示,harmony/目录结构与标准 OpenHarmony 工程完全一致:

harmony/ └── entry/ └── src/ └── main/ ├── resources/ │ └── rawfile/ ← 接收 bundle.harmony.js └── ets/ ← 原生代码(仅框架)

“一一对应”含义:

  • React 打包输出的harmony/.../rawfile/
  • 鸿蒙工程的entry/src/main/resources/rawfile/

🔗 这种设计使得JS Bundle 可被鸿蒙应用直接访问,无需额外配置。


图6:鸿蒙侧代码 —— 仅作为“架子”

打开entry/src/main/ets/Index.ets,可见:

import{RNAPP,RNOHCoreContext}from'@rnqh/react-native-openharmony';@Entry@Componentstruct Index{@StorageLink('RNOHCoreContext')privaternohCoreContext:RNOHCoreContext|undefined=undefined}

核心说明:

  • 无任何 UI 逻辑:不绘制按钮、文本或布局
  • 仅初始化 RN 运行时:通过RNOHCoreContext加载bundle.harmony.js
  • 提供能力桥接:后续可注册相机、网络等原生模块

🧱 因此称其为“架子”——它只是 React 应用的运行容器,而非功能实现者。


总结:完整工作流

  1. 写代码:在App.tsx中开发 React 组件
  2. 打包:执行npm run harmony生成bundle.harmony.js
  3. 输出:文件自动写入harmony/entry/.../rawfile/
  4. 集成:该目录即为鸿蒙工程的一部分
  5. 运行:鸿蒙 App 启动时加载 JS Bundle 并渲染 UI

这种架构实现了“前端专注逻辑,鸿蒙专注运行”的职责分离,是 RN4OH 跨平台能力的核心所在。

欢迎加入开源鸿蒙跨平台社区: https://openharmonycrossplatform.csdn.net

http://www.jsqmd.com/news/326640/

相关文章:

  • 从一行代码到一座桥梁:React Native View 组件在 OpenHarmony 生态中的深度解析与工程实践
  • .NET Framework 3.5是什么|.NET Framework 3.5下载安装保姆级教程(2026最新)
  • 不会Agent Skills?你out了!大模型开发必备技能,从入门到实战,一篇文章搞定!
  • 分析基金情况fiddler+pyecharts
  • 分形粗糙裂隙渗流模型。 分形理论。 界面粗糙度和细节随着分形维数的增加而增加。 水在裂隙中的流...
  • 单北斗GNSS在水库变形监测中的应用与维护方案分析
  • 大模型三国志:字节激进、阿里稳健、腾讯务实,开发者如何选择自己的AI赛道?2026年编程开发必看指南
  • 导师推荐9个降AIGC网站,千笔AI帮你彻底降AI率
  • 2026淮南本地生活团购代运营公司TOP5推荐:三十六行网络淮南分公司以全域运营实力登顶
  • 【背包问题】基于GA、PSO、ACO、GWO、SMA、HBA、IHBA 7种算法来解决0-1背包问题附Matlab代码
  • Web学习之用户认证
  • 【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 4 - 实践
  • 程序猿必学!RAG系统性能提升秘籍:从-5%到+6%的数据工程魔法
  • 2025.1.31
  • Kimi AI 官网 - K2.5 上线
  • 基于Transformer的问答系统[python]-计算机毕业设计源码+LW文档
  • 基于Python的招聘数据分析及可视化[python]-计算机毕业设计源码+LW文档
  • 2026年市场热门的布袋除尘器品牌推荐榜单,除尘器花板/布袋除尘器/电磁脉冲阀/除尘器门盖,布袋除尘器产品推荐排行
  • 中石化加油卡回收怕被骗?京顺回收带你避开3大陷阱
  • 时间序列中因果推断
  • 【信号分解】VMD分解包络线,包络谱,中心频率,峭度值,能量熵,样本熵,模糊熵,排列熵,多尺度排列熵,近似熵,包络熵,频谱图,希尔伯特变换MATLAB代码,西储大学数据集
  • CentOS7安装Mysql5.7(ARM64架构) - 详解
  • 服务好的广州太赫兹足疗仪排名
  • 多模态与频域
  • 工业触摸屏:投影电容式触摸屏(PCAP)原理详解
  • 【无人机控制】无人机集群完成污染物云团的追踪与监测任务,无人机动力学模型、机间通信协议、电池续航限制、云团扩散模型附Matlab代码
  • 多项式综合例题
  • MultiGeometricSynergy-AIPrognosy: 基于仿射几何、复流形几何、微分几何与谱几何4维空间协同感知的机械故障诊断方法(Python)
  • 开源链动2+1模式商城小程序在深度分销数字化转型中的应用研究
  • 深入解析:ShardingSphere数据库中间件:入门与使用