Taro是一个小程序框架,可以实现一套代码多端运行,减少开发的工作量;
小程序的架构
小程序主要分为逻辑层和视图层,以及在它们之下的原生部分;逻辑层主要负责js的运行,视图层主要负责页面的渲染,它们之间主要通过Event和Data进行通信,同时通过jsBridge调用原生API。
如果不考虑原生部分,对视图层和逻辑层做一下简化:也就是说在逻辑层调用APP()/Page()方法,且在方法里处理Data,生命周期/事件函数等,同时在视图层提供对应的模板及样式,就可以运行小程序了。
Taro的架构
Taro的架构主要分为编译时和运行时; 编译时:主要是把Taro代码通过Babel编译成小程序代码(js,wxml,wxss,json); 运行时:主要是处理一些生命周期,事件函数,data等部分的处理和对接;
Babel编译
使用babel-parser把Taro代码解析成抽象的语法树,然后在通过babel-types对抽象语法树进行一些列的修改、转换操作,最后在通过babel-generater生成对应的目标代码。(jsx是一个对javascript的语法扩展,写法灵活且千变万化,因此对jsx代码的适配是编译时最复杂的部分)
Taro运行时
Taro 当前架构只是在开发时遵循了 React 的语法,在代码编译之后实际运行时,和 React 并没有关系。BaseComponent和createComponent是Taro运行时的核心方法;
- BaseComponent主要是对react的一些核心方法setStae,forceUpdate继续替换和重写;
- createComponent主要是调用component()构建页面,对接事件,生命周期等;进行Diff Data,并调用setData方法进行更新;
总结
- Taro框架是重编译时,轻运行时;
- 编译后代码与 React 无关:Taro 只是在开发时遵循了 React 的语法
- 直接使用 Babel 进行编译:这也导致当前 Taro 在工程化和插件方面的羸弱