您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > 小程序

携程小程序生态之Taro跨端解决方案

时间:2022-08-17 14:59:20  来源:  作者:携程技术

一、摘要

 

随着携程接入小程序平台类型的增加,前端需要负责的端越来越多,研发成本也随之成倍增加。为了解决一套代码多端运行的诉求,携程小程序框架不断调整、升级,逐渐形成了携程Taro跨端解决方案。

 

二、背景

 

2.1 小程序现状

 

近几年业界推出了各种小程序平台,每个小程序平台都会提供一个专属的原生小程序DSL, 这些DSL之间或多或少存在一些差异,这意味着使用某一类型小程序DSL编写的代码,无法直接复用到其他小程序平台上,造成开发和维护成本成倍增加。

 

2.2 业务现状

 

目前携程支持的小程序业务涉及多个小程序平台,如果全部只使用平台自身的DSL开发,开发人员至少需要同时开发及维护5个活跃版本,开发任务繁重,代码维护困难。此外,每新增一类小程序入口,开发人员必须将原有业务逻辑重写一遍,不仅工作内容重复,而且严重影响业务落地速度。为此,一套代码多端运行的诉求迫在眉睫。

 

值得注意的是,携程已经接入了多个平台的小程序,使用多端统一开发框架从零开始开发小程序代码既浪费研发资源又不现实。我们需要考虑如何在携程当前已有的小程序代码的基础上使用跨端框架开发新业务、逐步切换原有代码,实现多端统一开发方案的平滑接入。

 

2.3 解决方案

 

为了解决上述问题,我们研发了携程Taro跨端解决方案,开发者只需使用Taro框架书写一套代码,便可获得在多个平台皆运行良好的小程序项目。此外,该方案还提供了仓库管理、辅助脚手架、编译功能扩展及过程优化等功能。

 

三、Taro跨端解决方案设计

 

3.1 技术选型

 

为了在保留原有代码的前提下实现一套代码多端运行,我们对市面上的跨端开发框架进行了调研,最终决定使用Taro 3 作为携程小程序的跨端框架。主要是考虑到Taro 3具有以下4项优点:

 

  • 框架稳定性高
  • 支持的平台种类多
  • 支持使用React 语法规范进行开发
  • 支持Taro和原生混合开发

 

3.2 整体架构设计

 

携程小程序随着业务的发展、多平台化趋势和跨端技术的不断演进,逐渐形成了一套多平台复用的Taro跨端解决方案。

 

携程小程序的项目工程架构图如图1所示。上半部分是跨端复用层,这一层的项目代码是基于Taro框架进行开发的,多个Taro模块可以灵活组合成一个完整的Taro项目;从下半张图可以看出,Taro项目是完整小程序项目的其中一个模块,Taro项目的运行需要依赖小程序原生壳工程。整个Taro项目是依据插件化的设计思想组织代码的,由多个独立的Taro模块和一个Taro基础壳工程构成。

 

3.3 Taro模块的插件化设计

 

首先,携程小程序是由多个团队协同开发的项目,跨团队协作开发时常常会出现代码冲突、文件覆盖等问题。因此,需要思考如何通过合理的项目架构从根本上解决这些问题,保证多团队并行开发的效率。考虑到可以采用模块化的概念,根据业务线类型将项目代码拆解成多个子模块,并约定文件放置以及引用规则,从而确保各个子模块的源码文件能够完全隔离。

 

然而,使用模块化开发方案,得到的Taro项目几乎不具有扩展性,Taro模块也无法快速便捷的被复用。怎样才能提高Taro模块的灵活性,使得任取一个或多个Taro模块进行组合都能得到一个完整的Taro项目,且合并到小程序原生壳工程中能够正常运行?为解决以上问题,我们进一步将插件化的设计思想应用在Taro跨端解决方案上,提供了定制化的Taro基础壳工程以及一套开发规范。

 

开发者需使用Taro基础壳工程作为开发模版,并遵循规范进行业务开发,所有Taro模块在本地开发或发布时按照统一的标准进行编译、融合,从而达到在不破坏原有项目结构的前提下灵活组合使用的目标。下面我们将从项目构成与开发规范、仓库管理、开发架构,运行方案等方面详细讲解Taro跨端解决方案。

 

3.4 项目结构与开发规范

 

Taro基础壳工程是由Taro官方的模版项目拓展而来,内部增加了定制化的编译配置、Plugins和基础组件类。如图2所示,Taro基础壳工程内仅包含与公共基础功能相关的文件,这些文件可抽象成3类内容:编译配置文件、用于扩展编译过程的Plugins,以及页面基类。

 

开发Taro模块时,开发者需要关注3块内容(扩展配置、项目文件、页面文件,参见图2),并遵守以下几项规范进行开发:

 

1)主包的大小直接影响着小程序启动性能,为此我们提出“非必要不打入主包”原则:除小程序启动时需要用到的文件、tabBar页面及公共基础文件外,其他文件应全部拆入分包中。Taro模块也须遵循该原则,开发者应将业务代码全部放置在自己的分包目录下,项目文件App.config.js中只增加分包页面配置。

 

2)为了避免合并项目时出现业务线之间文件相互覆盖或页面路径冲突,统一约定分包页面路径的前缀为“pages/业务线英文缩写”,结合“非必要不打入主包”原则使用,可以有效隔离各业务线的源码文件。

 

3)为确保Taro模块的业务相关内容(包括依赖包)完全放置在分包路径下,不占用主包的大小,我们提供了commonModule方案:在引用第三方依赖包前,需要开发者本地进行预编译操作,将需要引用的内容打包成放置在分包中的一个或多个commonModule文件,随后从预编译产物(commonModule)中引用所需的模块。除此之外,还可以通过commonOrigin方案获取依赖包的源码,此时会将所需依赖包的原样复制到开发者指定的文件夹目录下。

 

3.5 仓库管理

 

首先,Taro项目采用分仓开发的模式,将每个业务线的Taro模块存放在一个单独的git仓库中。将Taro模块分别存放在不同的仓库,可以保持各个业务仓库提交代码操作的独立。

 

其次,我们借助gitsubmodule 工具将各个Taro模块所在的仓库以及Taro基础壳工程仓库作为子目录包含到整个Taro项目的发布仓库中,为发布仓库和多业务仓建立起父子仓库的关联。建立仓库间的关联后,Taro项目可以借助git submodule 的获取子模块功能快速克隆自己所需的Taro模块源码,并且可以随时拉取各个业务仓库的最新代码。

 

再次,由于gitsubmodule允许一个仓库作为多个仓库的子目录,这意味着可以选取不同的Taro模块,将他们的仓库组合成新的发布仓库,结合携程小程序管理平台中各个小程序所需Taro模块的配置一起使用,可实现根据配置动态引入Taro模块的效果。

 

随后,通过对多个Taro模块进行组合,可以快速获得各种包含多个业务线的Taro项目,从而提高Taro模块在不同场景中的复用。

 

然后,将Taro项目作为完整小程序的一个bundle,将Taro项目的编译产物与小程序原生壳项目进行合并,即可获取到Taro混合开发的完整小程序代码。

 

如图3所示,通过组合Taro模块可以获取到包含不同功能的Taro项目,接着将Taro项目与不同类型的小程序原生壳项目结合,便可以轻松获取多个Taro混合开发的小程序项目。

 

3.6 开发及运行架构

 

开发者只需安装miniTools脚手架并执行初始化命令行,即可快速获取Taro模块的开发模版和小程序原生壳工程,完成项目初始化。开发Taro模块时,开发者需要遵循开发规范,在分包目录下添加文件并编写业务代码。编写过程中,只需执行编译指令,便可将本地开发的源码编译并融合到小程序原生壳工程中,得到包含Taro模块内容的完整小程序代码了。

 

结合上述本地开发过程,Taro跨端解决方案具体提供的功能以及优化工作说明如下:

 

1)Taro模块直接引用小程序原生壳项目内的模块。提供@/miniapp标识符,用于指代小程序完整项目根目录。同时,编译过程中会识别代码中的标识符,动态计算并修改引用路径。开发Taro模块时只需使用@/miniapp拼接文件的相对路径,便可以直接引用小程序完整项目根目录内的文件。

 

2)扩展页面配置项,提供设置自定义组件嵌套层级的功能。开发者可以在页面配置文件中增加自定义组件的嵌套层级配置,编译时将检索页面配置文件的内容,汇总并设置Taro项目用到的自定义组件的嵌套层级。

 

3)根据分包路径,动态生成splitChunks。为了防止公共文件被打到主包中(占用主包的大小),编译时会读取Taro模块配置的分包路径,动态生成splitChunks。该方案可以将分包用到的公共文件单独抽离到分包中,随后为分包中的所有页面添加对分包公共文件的引用即可。

 

4)提供扩展配置文件,允许自行添加alias和externals 配置,便于开发者自定义目录别名以及不需要打包的依赖。

 

5)提供模块分析功能,开发者可以更加便捷地查看每个chunk内包含哪些文件

 

6)使用混合模式进行打包,随后自动将编译产物移动到小程序原生壳工程中,同时将分包配置添加到小程序项目配置内。这一步是为了将Taro项目编译产物与携程原有的小程序代码合并成一个完整的Taro混合小程序项目。在开发规范的作用下,Taro模块的分包路径是根据各业务线隔离的,每个Taro模块的文件都严格放置在自己的分包路径内,因此只需将公共基础文件放置到项目根目录,分包内容迁移至各自的分包目录下,便可顺利完成代码合并。

 

3.7 项目发布

 

我们利用webhooks 实现Taro项目的流水线式迭代开发,当Taro模块提交修改时,会触发Taro项目发布仓库的pipeline。Taro项目发布仓库pipeline的主要工作流程如下:

 

首先,Taro项目会拉取所有子仓库的最新代码。接着,将从小程序管理平台获取当前Taro项目使用的Taro模块列表及相应的发布版本号,并据此按需将各个Taro模块的发布代码拉取到Docker中。至此,Taro项目所需发布的所有源码已经获取完毕。

 

接下来,将进行Taro项目的合并工作:将各个Taro模块的代码切换至指定版本,获取各个Taro模块中配置的分包路径,并将相关配置文件和分包目录下业务代码合并到Taro壳工程中。

 

Taro项目合并完成后,便会编译成指定小程序类型的代码。值得一提的是,Taro基础壳工程既是Taro项目壳又是开发模版,它提供了统一的Taro项目结构和编译方式,也是Taro模块能灵活组合的原因所在。

 

最后,将Taro项目的编译产物与相应类型的小程序原生代码进行合并,即可获得完整的Taro小程序项目。将项目代码上传到小程序后台,则标志着一整套项目发布流程的顺利完成。

 

四、总结

 

目前,Taro跨端解决方案已支持一套代码运行在5类小程序(微信、支付宝、字节跳动、百度、快手)平台。使用此方案进行开发的Taro小程序项目灵活度和复用性很高,可以按需选用Taro模块组合成一个完整的Taro项目。

 

此外,我们还提供了配套的脚手架工具、仓库管理、版本管理以及pipeline自动化方案,极大提升了小程序的开发、测试和发布效率。今后我们将继续完善小程序生态系统,为解决业务痛点不断孵化出更多的解决方案。

 

【作者简介】

携程前端框架团队,为携程集团各业务线提供优秀的Web解决方案,当前主要专注:新一代研发模式探索,Rust构建工具链路升级、Serverless应用框架开发、在线文档系统开发、低代码平台搭建、适老化与无障碍探索等。



Tags:Taro   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
开发移动应用如何高效利用Taro工具
最近公司的一些项目需要跨端框架,技术老大选了Taro,实践了一段时间下来,愈发觉得Taro是个好东西,所以在本篇文章中稍微介绍下。什么是Taro?Taro(或称为Taro框架)是一种用于构建跨平...【详细内容】
2023-06-07  Search: Taro  点击:(399)  评论:(0)  加入收藏
Taro框架应用优势下的移动App开发创新模式
最近公司的一些项目需要跨端框架,技术老大选了Taro,实践了一段时间下来,愈发觉得Taro是个好东西,所以在本篇文章中稍微介绍下。什么是Taro?Taro(或称为Taro框架)是一种用于构建跨平...【详细内容】
2023-06-05  Search: Taro  点击:(336)  评论:(0)  加入收藏
携程小程序生态之Taro跨端解决方案
一、摘要 随着携程接入小程序平台类型的增加,前端需要负责的端越来越多,研发成本也随之成倍增加。为了解决一套代码多端运行的诉求,携程小程序框架不断调整、升级,逐渐形成了携...【详细内容】
2022-08-17  Search: Taro  点击:(499)  评论:(0)  加入收藏
▌简易百科推荐
京东小程序数据中心架构设计与最佳实践
一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提...【详细内容】
2024-03-27  dbaplus社群    Tags:小程序   点击:(12)  评论:(0)  加入收藏
我们一起解锁小程序开发新姿势
如今,鸿蒙开发日益受到广大开发者的关注,而小程序开发也早已成为互联网领域的热门话题。那么,我们不禁要问:是否有可能将这两者融为一体,将小程序开发的便捷与高效带入鸿蒙生态中...【详细内容】
2024-03-20  前端充电宝  微信公众号  Tags:小程序   点击:(16)  评论:(0)  加入收藏
一段微信小程序前端与后端连接的代码,带注解
微信小程序的前端和后端连接通常涉及到使用微信小程序提供的网络请求API与后端服务器进行通信。以下是一个简单的示例,展示如何使用微信小程序的前端代码向后端发送请求并处...【详细内容】
2024-01-24    简易百科  Tags:代码   点击:(56)  评论:(0)  加入收藏
小程序必须要安装部署SSL证书吗?
自2017年9月21日,微信发布一则《关于公众平台接口不再支持HTTP方式调用的公告》。明确表示,为保证数据传输安全,提高业务安全性,公众平台不再支持HTTP方式调用。应避免影响正常...【详细内容】
2024-01-02  云诏    Tags:小程序   点击:(70)  评论:(0)  加入收藏
一文了解什么是微信小程序
如果您无需下载和管理即可获得像原生 iOS 或 Android APP 一样流畅的体验会怎样?腾讯通过微信小程序实现了这一替代方案。一、什么是微信小程序?它们与原生应用程序和 H5 迷你...【详细内容】
2023-12-26  小文智能    Tags:微信小程序   点击:(93)  评论:(0)  加入收藏
小程序开发需要多少钱?小程序开发的真实成本:报价案例、费用价格表与开发周期解析
分享一个上海客户的微信小程序定制开发的需求,销售课程与相关商品。项目分为后台管理系统和小程序前端,功能不是太复杂,周期大概1个月,费用3万。大家可能比较关心几个地方,比如一...【详细内容】
2023-12-11  久码小程序开发  今日头条  Tags:小程序   点击:(115)  评论:(0)  加入收藏
小程序技术分享:安全机制与运行机制
小程序凭借其高曝光率、开发成本低、运行更流畅等优势和特点,一经推出就被广泛使用,面对小程序的火爆,自然而然地,就有很多开发者转战小程序领域,本文主要带大家了解下小程序运行...【详细内容】
2023-12-07  前端实习生Findan    Tags:小程序   点击:(138)  评论:(0)  加入收藏
微信小程序的编译原理
2021年来,随着科技的进步,人们的生活水平也在不断提高。现在,微信小程序已经成为了现代人生活中不可或缺的一部分,它可以帮助我们更方便地查找信息,购物,预订机票和酒店,进行社交等...【详细内容】
2023-12-06  前端实习生Findan    Tags:小程序   点击:(128)  评论:(0)  加入收藏
模板小程序和订制开发小程序的区别?
相比外卖APP,外卖小程序是不用下载到手机的,所以对于用户来说更方便一点。简单方便的程序用户才更愿意使用。现在不少商家越来越重视外卖小程序开发,想通过外卖小程序冲进这片...【详细内容】
2023-11-24  重庆洺宸传媒    Tags:小程序   点击:(233)  评论:(0)  加入收藏
一分钟学会用宝塔面板搭建小程序
宝塔面板搭建小程序怎样用?想要使用宝塔面板搭建小程序?这里是实用教程,帮助您快速上手。在本教程中,我们将扼要了解宝塔面板的基础知识,并一步步演示怎么搭建一个小程序。第一步...【详细内容】
2023-11-15    网络  Tags:小程序   点击:(193)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条