本文作者:京东鸿蒙共建团队-姜尚泽,JJ1,背景作为华为自研的可实现万物互联的操作系统,鸿蒙自开播以来就受到了广泛关注,受到了国人的高度关注。而鸿蒙也没有让人失望。今年Harmony2.0正式上线供用户升级后,短短三个月就实现了1.2亿装机量,而在前不久的华为开发者大会上,华为宣布Harmony2.0。.0的装机量已经超过1.5亿。不少应用厂商也陆续推出了适配的鸿蒙应用。Taro是一个开放的跨终端、跨框架的解决方案。很多开发者都期待将小程序的能力移植到鸿蒙OS上。Taro可以用来开发鸿蒙&&OpenHarmony应用。鸿蒙方舟开发框架提供类Web编程范式,支持使用JS开发UI层,语法接近小程序。经过初步调研,Taro现有的架构可以适配鸿蒙。今年6月,我们提出了支持鸿蒙的新提案,希望实现三个目标:开发者可以使用Taro开发鸿蒙应用。开发者可以将现有的Taro应用适配到鸿蒙平台。开发者可以使用Taro的反向转换工具,将原生开发的小程序转换成Taro应用,再适配鸿蒙平台。目前,太郎已经与OpenHarmony建立了官方合作伙伴关系,并受邀成立了跨平台前端框架兴趣小组(SIG-CROSS-PLATFORM-UI)。同时,太郎与华为鸿蒙&&OpenHarmay保持内部沟通和分享。Taro拥有大量的开发者和优秀案例,可以有效补充华为鸿蒙&&OpenHarmay生态。2.实现细节鸿蒙的JSUI语法和小程序类似,但两者的底层原理毕竟不同,难免有很多差异。下面简单介绍一下鸿蒙和小程序的主要区别,以及Taro是如何处理这些区别的。一、鸿蒙与小程序的异同1.1项目组织鸿蒙的项目组织与小程序类似,包括入口文件app.js、页面、自定义组件。其中,页面和自定义组件由三类文件组成:.hml用于描述布局结构。与小程序的模板文件相比,语法和支持的能力略有不同。.css用于描述页面样式。.js用于处理页面与用户的交互,默认支持ES6语法。1.2配置文件不同于小程序指定的入口文件、页面文件、自定义组件。鸿蒙JSUI只有一个配置文件。鸿蒙的路由和小程序一样是可配置的,需要在JSUI的配置文件中进行配置。1.3在样式CSS方面,鸿蒙和RN一样有很多限制。例如不支持盒子模型,每个组件只支持部分CSS属性等。1.4组件&APIHarmony提供了一系列功能丰富的组件,与小程序的组件在命名和功能上略有不同.API也是一样的。两者的API集合有一些交集,在用法和功能上也有区别。2.兼容细节2.1Taro能解决什么问题?适配鸿蒙的太郎致力于尽可能地抹平分歧,但作为一个框架,注定有它能解决和不能解决的问题。语法差异可以通过编写运行时框架来处理;尽量使用鸿蒙组件和API实现微信小程序规范的组件和API,抹平两者的使用差异。但是CSS的差异,组件和API能力的差异等等,都取决于鸿蒙的底层实现,这不是太郎解决不了的。2.2HarmonyPluginTaro对Harmony的兼容主要是通过@tarojs/plugin-platform-harmony插件完成的,开发者可以将其编译成Harmony应用。它主要做了以下适配工作:a)Templates熟悉Taro的应该都知道,Taro是通过小程序端标签的递归来渲染页面的动态DOM树。但是鸿蒙中没有,所以我们使用自定义组件进行递归。b)RuntimeRuntime主要是兼容小程序的生命周期和鸿蒙端的数据更新方法setData。c)Components&API我们使用鸿蒙原生语法封装了符合微信小程序规范的组件库和API库。在兼容微信小程序属性的同时,也保留了鸿蒙特有的支持属性。目前共适配29个组件,16种API。组件示例库可以参考:taro-components-sample3。架构图3.如何使用如果你是新项目,可以升级Taro,选择鸿蒙模板;老项目需要手动配置如下:1.升级Taro到v3。5.0-canary.0版本首先需要安装v3.5.0-canary.0CLI工具npmi-g@tarojs/cli@canary然后更新项目本地的Taro相关依赖:修改Taro的版本-package.json文件中相关的依赖是~3.5.0-canary.0,然后重新安装依赖。如果安装失败或者项目打不开,可以删除node_modules、yarn.lock、package-lock.json,重新安装依赖后重试。2、安装taro适配Harmony插件(1)在Taro项目中安装Harmony插件@tarojs/plugin-platform-harmony$yarnadd--dev@tarojs/plugin-platform-harmony(2)在config/index.js中添加编译配置config={//配置插件的使用plugins:['@tarojs/plugin-platform-harmony'],mini:{//如果使用开发者工具的预览器(previewer)进行预览,你需要使用开发版的react-reconciler。//因为预览器在解析长字符串压缩文本时出现问题。(真机/远程真机没有这个问题)debugReact:true,//如果需要真机断点调试,需要关闭sourcemap生成enableSourceMap:false},//harmony相关配置harmony:{//[required]Harmony应用的绝对路径projectPath:path.resolve(process.cwd(),'../MyApplication'),//[可选]HAP的名称,默认为'entry'hapName:'entry',//[可选]】JSFA名称,默认为'default'jsFAName:'default'}}3.准备鸿蒙运行环境开发鸿蒙软件需要使用HUAWEIDevEcoStudio,提供模板创建、开发、编译、调试、发布等服务。主要包括以下内容:(1)注册开发者账号(2)下载DevEcoStudio安装包(3)启动DevEcoStudio,根据工具指南下载HarmonyOSSDK(4)新建MyApplicationJS工程(5)使用预览器或真机查看应用效果《初窥鸿蒙》《华为开发者工具》《鸿蒙开发文档》4.运行项目,运行命令$tarobuild--typeharmony--watch如果在步骤2(2)中设置了打包输出到Harmony项目的路径,可以查看Taro兼容Harmony应用的效果。testHarmony是你用DevEcoStudio创建的JS项目。4、最后,我们会继续完善鸿蒙的适配。预计2022年Q1发布v3.5正式版,同时也希望社区有更多开发者参与共建。无论是提Issues、在论坛发帖、提交PR还是帮助搭建周边生态等,对我们来说都是一笔宝贵的财富。让我们把太郎打造得更加强大。Taro团队衷心感谢大家一路以来的支持。正是因为有您的期待和信任,才催促我们走得更好。最终,这一版鸿蒙的适配由京东的鸿蒙共建团队共同完成。感谢以下同学:@AdvancedCat、@jiaozitang、@huozhongyi123、@troy-sxj、@JSZabc、@crazyonebyone、@evernoteHW、@soulhat、@xueshuai、@LuMeiling最后,有问题可以扫二维码下方代码添加我们的和谐助手进行反馈,感谢您的支持!欢迎关注傲兔实验室博客:aotu.io或关注傲兔实验室公众号(傲兔实验室),不定期推送文章。
