IT评测·应用市场-qidao123.com技术社区

标题: taro团体架构简析 [打印本页]

作者: 麻花痒    时间: 2024-8-30 06:25
标题: taro团体架构简析
如何用 React 写小步伐
  1. // index.wxml
  2. <view class="container">
  3.   <view class="userinfo">
  4.     <button wx:if="{{!hasUserInfo && canIUse}}"> 获取头像昵称 </button>
  5.     <block wx:else>
  6.       <image src="{{userInfo.avatarUrl}}" background-size="cover"></image>
  7.       <text class="userinfo-nickname">{{userInfo.nickName}}</text>
  8.     </block>
  9.   </view>
  10.   <view class="usermotto" style="color:{{color}};" >
  11.     <text class="user-motto">{{motto}}</text>
  12.   </view>
  13. </view>
  14. // app.wxss
  15. @import "common.wxss";
  16. .middle-p {
  17.   padding:15px;
  18. }
复制代码
目标:jsx -> 小步伐模板


babel作为代码编译器,能将我们的代码编译成抽象语法树(AST),再将语法树通过转义(穷举,官方推荐写法、常用写法等)天生我们的目标代码
初代的taro最基本的原理就是如此,在1.x版本中专门维护了一个包,这个包将react中的各种写法根据语法树转换成小步伐目标代码,以此用react写小步伐
taro1.0初代架构



编译时:根据设置将入口文件中的config举行遍历处理,判断页面依赖、获取页面模板并根据对应编译平台输出成对应平台的小步伐文件
运行时:重要负责组件的渲染、变乱处理、数据绑定(state->data)、生命周期管理以及平台兼容等一系列操作,这些都Taro通过自定框架来模拟实现,在设计的时候使用了雷同react的设计概念,以便于开发者可以用雷同于开发web应用的方式来开发小步伐。
  1. 1. **组件系统**: Taro 实现了一套自己的组件系统,这套系统模仿了 React 的组件模型,使得开发者可以使用类似 React 的方式编写组件和管理状态。这包括组件的生命周期管理、状态(state)和属性(props)的更新机制等。
  2. 2. **事件系统**: Taro 抽象并模拟了一套类似于 React 的事件处理系统,这包括事件的监听、响应和事件对象的封装。事件处理程序的绑定和解绑都是通过 Taro 运行时来管理的。
  3. 3. **数据绑定**: Taro 1.0 提供了一种数据绑定机制,使得组件的渲染可以依赖于状态和属性。当状态或属性发生变化时,Taro 会自动更新组件,确保视图与数据保持同步。
  4. 4.**生命周期管理**: Taro 将 React 的组件生命周期映射到小程序的页面和组件生命周期中,这样开发者能够以熟悉的方式编写代码,而 Taro 运行时则负责正确地调用这些生命周期方法。
复制代码
类型
阶段
Taro
小步伐
工程目次
编译时
  1. my-project/
  2. ├── build/  # 构建文件夹
  3. │   ├── index.html  # 主页HTML文件
  4. │   └── index.js  # 主页JavaScript文件
  5. ├── config/  # 配置文件夹
  6. │   ├── app.json  # 应用配置文件
  7. │   └── project.config.js  # 项目配置文件
  8. ├── node_modules/  # 第三方依赖库
  9. ├── package.json  # 包管理器配置文件
  10. ├── src/  # 源代码文件夹
  11. │   ├── assets/  # 资源文件夹(图片、字体等)
  12. │   ├── components/  # 组件文件夹
  13. │   │   ├── index.js  # 组件入口文件
  14. │   │   └── MyComponent.js  # 组件实现文件
  15. │   ├── index.js  # 主入口文件
  16. │   └── pages/  # 页面文件夹
  17. │       ├── index.js  # 首页入口文件
  18. │       └── otherPage/index.js  # 其他页面入口文件
  19. └── tools/  # 工具文件夹
  20.     ├── dev-server.js  # 开发服务器配置文件
  21.     └── start-dev-server.sh  # 开发服务器启动脚本
复制代码
  1. my-wechat-app/
  2. ├── app.json  # 应用配置文件
  3. ├── app.wxss  # 样式文件
  4. ├── app.js  # 主入口文件
  5. ├── pages/  # 页面文件夹
  6. │   ├── index.js  # 首页入口文件
  7. │   └── otherPage/index.js  # 其他页面入口文件
  8. │       ├── otherPage.wxml  # 页面组件文件
  9. │       ├── otherPage.wxss  # 页面样式文件
  10. │       └── otherPage.js  # 页面逻辑文件
  11. ├── utils/  # 公共工具文件夹
  12. │   ├── util.js  # 公共工具文件
  13. │   └── ...
  14. ├── node_modules/  # 第三方依赖库
  15. ├── package.json  # 包管理器配置文件
  16. └── README.md  # 说明文档
复制代码
组件适配
编译时
  1. <View class="button-container">
  2.    <Button class="button" onClick={onClick}>
  3.      {text}
  4.     </Button>
  5. </View>
复制代码
  1. <view class="button-container">
  2.   <button class="button" bindtap="buttonClick">{{text}}</button>
  3. </view>
复制代码
react语法-写法
编译时
  1. <View className="list">
  2.    {items.map((item) => (
  3.      <View key={item.id} className="list-item">
  4.         {item.title}
  5.       </View>
  6.     ))}
  7. </View>
复制代码
  1. <view class="list">
  2.   <block wx:for="{{items}}" wx:key="index">
  3.     <view class="list-item">
  4.       {{item.title}}
  5.     </view>
  6.   </block>
  7. </view>
复制代码
react语法-运行
运行时
state、props
componentDidMount、componentDidUpdate、componentWillUnmount
data
onReady、onHide、onUnload
api适配
运行时
Taro调用
wx?. window?.
特点:


弊端:

由于框架是自研的,就标志着taro须要考虑浩繁的边际条件,导致了构建系统的逻辑也变得繁杂了起来,出现了以下几个问题:

Taro 2.0 的变革

Taro 2.0 的命令行变得非常轻量,只会做区分编译平台、处理差别平台编译入参等操作,随后再调用对应平台的 runner 编译器做代码编译操作,而原来大量的 AST 语法操作将会改造成 Webpack 处理



各个平台的runner任务:

  1. - **微信小程序**:将 JSX 编译成 WXML,编译 JavaScript 和 TypeScript 代码,CSS/SCSS/LESS 转换为 WXSS,图片等静态资源也会以特定的形式管理。
  2. - **支付宝小程序**:编译结果类似于微信小程序,但是不同平台有其特定的模板和样式文件后缀名,比如支付宝小程序使用 .axml 作为模板文件后缀,.acss 作为样式文件后缀。
  3. - **H5(Web 应用)**:生成经典的 HTML、CSS 和 JavaScript 文件,可以在各类现代浏览器中运行。
  4. - **React Native**:编译生成能被 React Native 运行时理解的 JavaScript 代码和资源,保持代码逻辑与其他平台尽量一致,但针对原生应用的表现有一些差异化处理。
复制代码
webpack重要工作:

优势:


taro3.0开放式架构

前端的本质:调用了浏览器的那几个 BOM/DOM 的 API,如:createElement、appendChild、removeChild等。


因此3.0创建了taro-runtime的包,然后在这个包中实现了一套高效、精简版的 DOM/BOM API(下面的 UML 图只是反映了几个重要的类的结构和关系)


然后通过 Webpack 的ProvidePlugin插件,注入到小步伐的逻辑层。


如许,在小步伐的运行时,就有了一套高效、精简版的 DOM/BOM API
新框架适配

在新架构加持下,Taro 不再仅局限于 React 阵营,可以不再限定使用的框架语法, Taro 官方内置了 React、Vue、Preact、Svelte、Nerv(京东凹凸实行室打造的类React前端框架) 五种框架的支持


开放式框架思想:



横向扩展:扩展一个全新的编译平台;新的编译平台继承自TaroPlatforBase,如美团小步伐
纵向扩展:继承已有端平台插件,扩展出新的编译平台;如 QQ 小步伐插件继承于微信小步伐插件。
优势:


Taro架构历程


taro4.x的展望




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4