Taro v4.1.0 及更高版本已支持鸿蒙平台,能够将微信、支付宝等小程序代码快速转换为鸿蒙应用。其底层通过 Harmony-CPP 插件实现,打包产物为纯血鸿蒙应用(非 WebView 套壳)。对于已有小程序项目的团队来说,这是一条低成本进入鸿蒙生态的路径——一套代码可运行于微信小程序、支付宝小程序、H5 和鸿蒙,开发者无需学习 ArkTS,直接用 React 或 Vue 即可开发。不过,当前鸿蒙平台属于较新支持,API 覆盖尚不完全,开发和调试过程中容易遇到一些特定问题。
在动手之前,需要先区分几个概念:华为研发的智能终端操作系统称为“鸿蒙操作系统”,其开源基础能力捐赠给开放原子开源基金会后形成 OpenHarmony,而华为基于 OpenHarmony 开发的商用版本即为 HarmonyOS。为简洁起见,下文统称“鸿蒙”。
- // 配置鸿蒙开发环境
- // 第一步:安装 DevEco Studio
- // 访问 https://developer.harmonyos.com/cn/home 注册开发者账号
- // 前往 https://developer.huawei.com/consumer/cn/deveco-studio/ 下载最新版并安装
- // 第二步:创建鸿蒙主项目(必须选择 Stage 模型)
- // 在 DevEco Studio 中依次操作:
- // 1. 点击 Create HarmonyOS Project
- // 2. 选择 Stage 模型(推荐),不要选 FA 模型(否则后续编译会报错)
- // 3. 选择设备类型(通常选手机)
- // 4. 输入项目名称和路径(路径不宜过长,避免编译异常)
- // 5. 点击 Finish
- // 项目创建完成后,关注 entry/src/main/ets/pages/Index.ets 作为页面入口
- // 第三步:调试方式
- // DevEco Studio 提供三种调试方式:模拟器、真机、本地预览器。
- // 注意:预览器只能预览 ArkTS 组件,Taro 打包后的应用无法在预览器中显示,必须使用模拟器或真机。
复制代码
安装 Taro Harmony-CPP 插件:
- // 使用 npm 或 pnpm 安装插件
- npm i @tarojs/plugin-platform-harmony-cpp
- // 或
- pnpm i @tarojs/plugin-platform-harmony-cpp
- // 安装完成后,在 config/index.ts 中配置插件
- import os from 'os'
- import path from 'path'
- const config = {
- // ...其他配置
- plugin: ['@tarojs/plugin-platform-harmony-cpp'],
- harmony: {
- compiler: 'vite', // 当前仅支持 Vite 编译,写 webpack 会报错
- projectPath: path.join(os.homedir(), 'projects/my-business-project'), // 必须是绝对路径
- hapName: 'entry', // 模块名,默认为 entry
- },
- }
- export default config
复制代码
编译项目时,使用命令:
- // 编译鸿蒙应用
- taro build --type harmony_cpp
- // 注意:命令是 harmony_cpp 而非 harmony,少了下划线会报错
- // 编译鸿蒙原生组件
- taro build native-components --type harmony_cpp
- // 若要同时编译应用和组件,需在页面配置中添加 entryOption: false
复制代码
在 Taro 中集成鸿蒙原生模块,可通过 usingComponents 引入原生组件,或使用 importNativeComponent 获得类型提示。如果已有鸿蒙工程,需要在入口处初始化 Taro 上下文,并在 module.json5 中配置 pages 参数。组件模式下,可参考原生 ets 组件方式引入。
定制 Taro 运行时行为也非常灵活:继承 HarmonyCPP 实例可以添加自定义运行时路径;通过事件监听还能捕获 Taro 方法调用的参数,或监控未实现的 API:
- import { eventCenter } from '@tarojs/runtime'
- import { IEtsMethodsOptions } from '@tarojs/plugin-platform-harmony-cpp/dist/runtime/runtime-harmony'
- eventCenter?.on('__taroPluginEtsMethodsTrigger', (option: IEtsMethodsOptions) => {
- switch (option.scope) {
- case 'route': // 处理路由
- case 'network': // 处理网络
- default: break
- }
- })
- eventCenter?.on('__taroNotSupport', (option) => {
- console.log('API 未实现:', option)
- })
复制代码
公共依赖库默认使用内置版本,也可通过配置禁用或指定版本。类型定义方面,需要在 Taro 项目的 types/global.d.ts 中添加引用:
- /// <reference types="@tarojs/taro" />
- /// <reference path="../node_modules/@tarojs/plugin-platform-harmony-cpp/types/define.d.ts" />
复制代码
不添加此引用会导致 TypeScript 编译报类型错误,例如“Cannot find name 'HarmonyCPP'”。
实战中踩坑记录较多,以下是几个最关键的问题:
- // 坑一:projectPath 必须是绝对路径
- // 如果配置为相对路径(如 ./../my-harmony-project),编译会报“Cannot find harmony project”
- // 坑二:只支持 Vite 编译
- // 即使项目之前用 Webpack,也必须改为 Vite,否则编译报找不到编译器
- // 坑三:预览器不可用
- // DevEco Studio 的预览器只能查看 ArkTS 组件,Taro 打包产物需用模拟器或真机运行
- // 坑四:API 覆盖不全
- // 与 uni-app x 类似,部分 API 尚未实现(如 uni.chooseImage),开发前需查阅文档确认
- // 坑五:必须添加类型定义引用
- // 否则 TypeScript 编译报类型错误,容易误判为插件安装问题
- // 坑六:鸿蒙项目必须是 Stage 模型
- // 使用 FA 模型会导致编译报找不到 entry 模块,必须重建 Stage 模型项目
- // 坑七:编译命令容易记错
- // 正确命令为 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 是一个值得考虑的务实方案。 |