一开始我们只做微信小程序随着我们的业务不断扩张和各大小程序平台的崛起,针对每个平台都去写一套代码是不现实的。而且原生的小程序开发模式有很多弊端。
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
Taro 3.0 已经逐渐成熟,我们项目已经进行了Taro 3.0的升级,因此本文代码示例以 Taro 3.0 作为基础。
什么是 TaroTaro 是一个多端统一的开发框架。使用 taro 它可以支持 React 的开发方式,编写一次可以运行多端的代码,就能够生成可以在各种小程序,h5 甚至 React Native 等多端应用。
Taro 官方介绍:
Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发 微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5/ React Native 等应用。现如今市面上端的形态多种多样,Web、React Native、微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编写多套代码的成本显然非常高,这时候只编写一套代码就能够适配到多端的能力就显得极为需要。
它的主要特点是:
快:可以快速开发小程序: 解决小程序开发各种痛点;
多:可以实现多终端适配:一套代码适配小程序、H5、RN 等多终端;
随着应用变得庞大之后,复杂度越来越高,原生小程序开发的痛点逐渐暴露出来:
•代码组织复杂:写一个页面的文件结构繁琐(四个之多)
•规范不统一:组件、方法命名规范不统一、各种书写方式,语法结构不一致像 React 又像 Vue
•孱弱的字符串模板:逻辑表现力不强,不支持 eslint
•依赖管理混乱:缺少 npm 包依赖管理
•不完全的 ES Next:仅支持部分 ES Next 语法,比较新的 ES2020, ES2021 都不支持
•落后的开发方式:前端工程体系不完善,webpack 打包,css 预处理等缺失,对于前端来说比较落后的,对个人成长也不利
对于以上微信小程序开发模式的痛点,业界也给出了一些可选方案:
对比分析
Taro 支持平台最全面,独具转换能力,性能方面优于其它框架,总结特点如下:
一处编写,多端运行
设计思想主要采用 React 开发方式用 React 写多端应用核心思想代码转换:使代码可以在不同平台上运行
运行时适配:使代码在不同平台上有相同表现
JSX
WXML
Taro 代码编译原理
Taro 的编译原理:就是对输入的源代码进行语法分析,语法树构建,随后对语法树进行转换操作再解析生成目标代码的过程。
首先是 Parse,将代码解析(Parse)成抽象语法树(Abstract Syntex Tree),然后对 AST 进行遍历(traverse)和替换(replace)(这对于前端来说其实并不陌生,可以类比 DOM 树的操作),最后是生成(generate),根据新的 AST 生成编译后的代码。
开发时遵循 React 语法标准,结合编译原理的思想,对代码文件进行一系列转换操作,最终获得可以在小程序运行的代码。而 React 最开始就是为了解决 Web 开发而生的,所以对代码稍加改动,也可以直接生成在 Web 端运行的代码,而同属 React 语法体系下的 React Native,也能够很便捷地提供支持。同理其他平台,如快应用、百度小程序等,将源码进行编译转换操作,也能获得该平台下的对应语法代码。
可以看出小程序和 Web 端上组件标准与 API 标准有很大差异,这些差异仅仅通过代码编译手段是无法抹平的,例如你不能直接在编译时将小程序的 直接编译成
,因为他们虽然看上去有些类似,但是他们的组件属性有很大不同的,仅仅依靠代码编译,无法做到一致,同理,众多 API 也面临一样的情况。针对这样的情况,Taro 采用了定制一套运行时标准来抹平不同平台之间的差异。
这一套标准主要以三个部分组成,包括标准运行时框架、标准基础组件库、标准端能力 API,其中运行时框架和 API 对应 @taro/taro,组件库对应 @tarojs/components,通过在不同端实现这些标准,从而达到去差异化的目的。
多端适配基础标准多端适配基础架构图如下:
快速上手初始化项目环境准备:需要有个 node 环境,运行 npm 命令:
开始使用 Taro 编写页面:
运行项目多平台启动命令示例:如果同时看三端效果:分别运行以上命令即可;
微信原生小程序转换 Taro 小程序Taro 项目的组成Taro项目目录结构基本的目录结构:
比较完整的多端项目结构:
完整的文档请访问:https://taro-docs.jd.com/
多端适配多终端配置文件编写•微信的配置文件 project.config.JSON,文件内容可以自定义微信小程序的选项,运行的目录和 appid 等;
•百度小程序的配置文件 project.swan.json 内容和微信类似;
•京东小程序的配置文件 project.jd.json 内容和微信类似;
•其它平台的小程序都有独立的配置文件便于运行的调试;
每个平台有不同的页面配置信息:
•微信小程序页面是全量的,有微信登录页面(其它平台不需要);
•百度小程序有专门的登录页面有些页面百度不支持需隐藏比如:图片裁剪,达达同城,打印等;
•京东小程序:不支持批量寄,不需要登录页面,不支持分包,都要写入主包中;
平台特定 js 代码块儿实现,在任意 js 代码中加入如下语法:
平台特定 css 代码块儿实现, 在任意 css 代码中加入如下语法:
提示:代码在打包时不会增加包体积,针对不同平台提取相应代码。
一些典型的多端通用解决方案:
百度小程序开发注意事项:
京东小程序开发注意事项:
在 config/index.js 配置:outputRoot: dist/${process.env.TARO_ENV}
生态与规划物流风格的 Taro UI组件库—Tarot(已适配Taro3.0)定制化 Taro 模板工程定制化 Taro 模板工程模板工程主要特性:
•自带按需引入的 Tarot 组件库及组件使用示例。
•自带 pandora-tools 中的工具,如网关调用插件等。
•登陆适配多端,小程序端自动引入京东无线登陆插件,h5端自动跳转无线统一登陆M页d等。
•网关调用适配多端,自带 Demo 示例;
•包含 TypeScript 和 Redux等更多高级API及用法示例;
•其它功能持续更新……
MiniDebug 是一款多端小程序调试工具,旨在提高小程序开发、测试效率的工具库
功能介绍:
主要功能包括环境切换、身份Mock、应用信息获取、位置模拟、缓存管理、扫一扫、H5跳转、更新版本等。工具部分页面如下图所示:
目前已经在 GitHub 上开源(欢迎 issue):https://github.com/jdlfe/minidebug
物流风格的小程序可视化拖拽平台(规划中)
京东商城已经实现了小程序可视化拖拽平台:https://ling.jd.com/atom/cms/pc/06599
结语:Taro V3.0.0 目前支持 React、Nerv、Vue 三类框架,在未来 Taro 将开放拓展能力,使得开发者可以通过 Taro 拓展更多的框架支持,(比如:适配 Flutter 将成为可能 )。目前Taro框架完善社区活跃,即使没有多端需求,仅用 Taro 开发 H5 也是个不错的选择(未来可以 0 成本接入小程序平台),想了解更多 Taro 3.0 实践经验欢迎线下交流。
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved