查看: 177|回复: 3

Taro 开发鸿蒙应用实战:环境搭建与踩坑全记录

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式
Taro v4.1.0 及更高版本已支持鸿蒙平台,能够将微信、支付宝等小程序代码快速转换为鸿蒙应用。其底层通过 Harmony-CPP 插件实现,打包产物为纯血鸿蒙应用(非 WebView 套壳)。对于已有小程序项目的团队来说,这是一条低成本进入鸿蒙生态的路径——一套代码可运行于微信小程序、支付宝小程序、H5 和鸿蒙,开发者无需学习 ArkTS,直接用 React 或 Vue 即可开发。不过,当前鸿蒙平台属于较新支持,API 覆盖尚不完全,开发和调试过程中容易遇到一些特定问题。

在动手之前,需要先区分几个概念:华为研发的智能终端操作系统称为“鸿蒙操作系统”,其开源基础能力捐赠给开放原子开源基金会后形成 OpenHarmony,而华为基于 OpenHarmony 开发的商用版本即为 HarmonyOS。为简洁起见,下文统称“鸿蒙”。
  1. // 配置鸿蒙开发环境
  2. // 第一步:安装 DevEco Studio
  3. // 访问 https://developer.harmonyos.com/cn/home 注册开发者账号
  4. // 前往 https://developer.huawei.com/consumer/cn/deveco-studio/ 下载最新版并安装
  5. // 第二步:创建鸿蒙主项目(必须选择 Stage 模型)
  6. // 在 DevEco Studio 中依次操作:
  7. // 1. 点击 Create HarmonyOS Project
  8. // 2. 选择 Stage 模型(推荐),不要选 FA 模型(否则后续编译会报错)
  9. // 3. 选择设备类型(通常选手机)
  10. // 4. 输入项目名称和路径(路径不宜过长,避免编译异常)
  11. // 5. 点击 Finish
  12. // 项目创建完成后,关注 entry/src/main/ets/pages/Index.ets 作为页面入口
  13. // 第三步:调试方式
  14. // DevEco Studio 提供三种调试方式:模拟器、真机、本地预览器。
  15. // 注意:预览器只能预览 ArkTS 组件,Taro 打包后的应用无法在预览器中显示,必须使用模拟器或真机。
复制代码

安装 Taro Harmony-CPP 插件:
  1. // 使用 npm 或 pnpm 安装插件
  2. npm i @tarojs/plugin-platform-harmony-cpp
  3. // 或
  4. pnpm i @tarojs/plugin-platform-harmony-cpp
  5. // 安装完成后,在 config/index.ts 中配置插件
  6. import os from 'os'
  7. import path from 'path'
  8. const config = {
  9.   // ...其他配置
  10.   plugin: ['@tarojs/plugin-platform-harmony-cpp'],
  11.   harmony: {
  12.     compiler: 'vite',   // 当前仅支持 Vite 编译,写 webpack 会报错
  13.     projectPath: path.join(os.homedir(), 'projects/my-business-project'), // 必须是绝对路径
  14.     hapName: 'entry',   // 模块名,默认为 entry
  15.   },
  16. }
  17. export default config
复制代码

编译项目时,使用命令:
  1. // 编译鸿蒙应用
  2. taro build --type harmony_cpp
  3. // 注意:命令是 harmony_cpp 而非 harmony,少了下划线会报错
  4. // 编译鸿蒙原生组件
  5. taro build native-components --type harmony_cpp
  6. // 若要同时编译应用和组件,需在页面配置中添加 entryOption: false
复制代码

在 Taro 中集成鸿蒙原生模块,可通过 usingComponents 引入原生组件,或使用 importNativeComponent 获得类型提示。如果已有鸿蒙工程,需要在入口处初始化 Taro 上下文,并在 module.json5 中配置 pages 参数。组件模式下,可参考原生 ets 组件方式引入。

定制 Taro 运行时行为也非常灵活:继承 HarmonyCPP 实例可以添加自定义运行时路径;通过事件监听还能捕获 Taro 方法调用的参数,或监控未实现的 API:
  1. import { eventCenter } from '@tarojs/runtime'
  2. import { IEtsMethodsOptions } from '@tarojs/plugin-platform-harmony-cpp/dist/runtime/runtime-harmony'
  3. eventCenter?.on('__taroPluginEtsMethodsTrigger', (option: IEtsMethodsOptions) => {
  4.   switch (option.scope) {
  5.     case 'route':   // 处理路由
  6.     case 'network': // 处理网络
  7.     default: break
  8.   }
  9. })
  10. eventCenter?.on('__taroNotSupport', (option) => {
  11.   console.log('API 未实现:', option)
  12. })
复制代码

公共依赖库默认使用内置版本,也可通过配置禁用或指定版本。类型定义方面,需要在 Taro 项目的 types/global.d.ts 中添加引用:
  1. /// <reference types="@tarojs/taro" />
  2. /// <reference path="../node_modules/@tarojs/plugin-platform-harmony-cpp/types/define.d.ts" />
复制代码

不添加此引用会导致 TypeScript 编译报类型错误,例如“Cannot find name 'HarmonyCPP'”。

实战中踩坑记录较多,以下是几个最关键的问题:
  1. // 坑一:projectPath 必须是绝对路径
  2. // 如果配置为相对路径(如 ./../my-harmony-project),编译会报“Cannot find harmony project”
  3. // 坑二:只支持 Vite 编译
  4. // 即使项目之前用 Webpack,也必须改为 Vite,否则编译报找不到编译器
  5. // 坑三:预览器不可用
  6. // DevEco Studio 的预览器只能查看 ArkTS 组件,Taro 打包产物需用模拟器或真机运行
  7. // 坑四:API 覆盖不全
  8. // 与 uni-app x 类似,部分 API 尚未实现(如 uni.chooseImage),开发前需查阅文档确认
  9. // 坑五:必须添加类型定义引用
  10. // 否则 TypeScript 编译报类型错误,容易误判为插件安装问题
  11. // 坑六:鸿蒙项目必须是 Stage 模型
  12. // 使用 FA 模型会导致编译报找不到 entry 模块,必须重建 Stage 模型项目
  13. // 坑七:编译命令容易记错
  14. // 正确命令为 taro build --type harmony_cpp,少了 _cpp 会报错
复制代码

总结来看,Taro 开发鸿蒙应用的关键流程如下:
1. 安装 DevEco Studio,创建 Stage 模型的鸿蒙项目。
2. 在 Taro 项目中安装 @tarojs/plugin-platform-harmony-cpp 插件,并配置 projectPath(绝对路径)、compiler 为 vite。
3. 使用 taro build --type harmony_cpp 编译,产物自动输出至鸿蒙项目的 entry/src/main/ets 目录,无需手动复制。
4. 在 DevEco Studio 中用模拟器或真机运行调试,注意预览器不支持 Taro 打包产物。

当前 Taro 的鸿蒙支持仍在持续完善中,API 覆盖率会逐渐提升。对于需要快速将小程序迁移至鸿蒙的团队,Taro 是一个值得考虑的务实方案。
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: Taro 开发鸿蒙应用实战:环境搭建与踩坑全记录

非常详细的实战分享,感谢楼主!特别是区分了鸿蒙、OpenHarmony和HarmonyOS,这个点对新手太重要了,不然搜索资料容易一头雾水。 关于“预览器不可用”那个坑,我补充一下:其实不只是Taro打包的应用,直接写ArkTS项目里如果用了系统能力API,预览器也会有限制,所以模拟器和真机调试确实是避不开的。另外projectPath绝对路径那个坑我也踩过,后来用`path.resolve`或者写死全路径才解决。 想问下楼主,Taro v4.1.0版本对原生组件的支持情况怎么样?比如鸿蒙的`List`、`Dialog`这些,在Taro里能直接通过`usingComponents`引用吗?还是需要额外封装?
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: Taro 开发鸿蒙应用实战:环境搭建与踩坑全记录

感谢楼主这么详细的分享!最近正好在评估把现有小程序往鸿蒙迁移的方案,这篇实战记录太实用了。几个关键点尤其关键: - **projectPath必须是绝对路径** —— 这个小细节之前真的没注意,踩坑预警加一; - **预览器不可用** —— 很多刚接触的人可能都会以为能直接预览,这个提醒很及时; - **只支持Vite编译** —— 对老项目改编译配置也是个坑。 想请教一下,在实际开发中,像 `chooseImage` 这类未实现的 API,目前有什么推荐的替代思路吗?是暂时先用原生模块绕一下,还是等官方补全更稳妥?另外真机调试时的性能体验如何,和原生 ArkTS 应用比有明显差距吗?
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层

Re: Taro 开发鸿蒙应用实战:环境搭建与踩坑全记录

感谢楼主的详细分享!环境搭建和坑点记录非常实用,尤其是“projectPath 必须绝对路径”和“只支持 Vite”这两个点,估计能帮不少人省下排查时间。想请教一下,楼主有没有遇到哪些常用 API 在鸿蒙端还没实现,目前有什么比较好的替代方案或者降级处理思路?另外,对于从微信小程序迁移过来的项目,组件库的兼容性表现如何,有没有需要注意的地方?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-7-23 13:38 , Processed in 0.112577 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部