Implementation Details
This article will introduce some of the implementation details of Taro, drive developers to understand the specific functions of Taro related dependency packages, and give developers a better understanding of the Taro project.
note
Occasional updates.
CLI
@tarojs/cli
is the Taro CLI tool, which is based on the plug-in kernel implementation of the @tarojs/service
package.
The CLI is pre-mounted with a set of built-in plugins, each command and each build platform is a separate Taro plugin.
Mini Program
Compile time
When compiling mini program, the CLI calls the @tarojs/mini-runner
package. The mini-runner
mainly does these things.
- It is responsible for adapting Webpack to the developer's build configuration to adjust the Webpack configuration. 2.
- Injects custom PostCSS plugins. (e.g.
postcss-pxtransform
) - Inject custom Webpack plugins. 4.
- Inject custom Webpack Loaders. (Loaders are located in the
@tarojs/taro-loader
package) - Call Webpack to start the build.
- Modify the Webpack build product to adjust the final build result.
Runtime
In order for frameworks like React, Vue, etc. to run directly on the mini program side, we need to emulate the browser environment in the logic layer of the mini program, including implementing the DOM, BOM API, etc.
@tarojs/runtime
is the core of Taro's runtime adapter, which implements a streamlined DOM, BOM API, event system, bridge layer for web framework and mini program framework, etc.
The ReactDOM is large and contains a lot of compatibility code. So Taro has implemented a custom renderer instead of ReactDOM with react-reconciler, which is located in the
@tarojs/react
package.
At this point the web framework can render a Taro DOM tree using the Taro mockup API, but this all runs at the logic level of the mini program. How does Taro use a static template file to render a dynamic Taro DOM tree when the mini program xml template needs to be written dead ahead of time?
Taro chose to take advantage of the fact that mini program <template>
s can reference other <templates>
by rendering each DOM node of the Taro DOM tree as a <template>
. This is done by simply setData
ing the serialized data of the Taro DOM tree, which triggers the cross-referencing of <template>
and renders the final UI.
The project's
dist/base.xml
file is a collection of these<templates>
.
Platfrom Plugin
Taro internally supports 6 mini program platforms by default, since Taro v3.1 support for each mini program platform is available as a Taro plugin.
@tarojs/plugin-platform-weapp
Wechat mini program plugin@tarojs/plugin-platform-alipay
Alipay mini program plugin@tarojs/plugin-platform-swan
Baidu smart program plugin@tarojs/plugin-platform-tt
ByteDance mini program plugin@tarojs/plugin-platform-qq
QQ mini program plugin@tarojs/plugin-platform-jd
Jingdong mini program plugin
Platform plugins are platform specific and inject logic for compile-time and run-time respectively, see Platform Plug-ins Overview for details。
H5
Compile time
When compiling H5, the CLI calls the @tarojs/webpack-runner
package. The webpack-runner
does these main things.
- It is responsible for adjusting the Webpack configuration based on the developer's compile configuration to adjust the Webpack configuration.
- Injects custom PostCSS plugins. (e.g.
postcss-pxtransform
,postcss-plugin-constparse
) - Inject custom Webpack plugins.
- Inject custom Webpack Loaders. (Loaders are located in the
@tarojs/taro-loader
package) - Call Webpack to start the build.
- Modify the Webpack build product to adjust the final build result.
Component Library
Taro implements a base component library on the H5 side that follows the WeChat mini program specification.
By default, the Web Components component library provided by @tarojs/components
is used.
When developing with React, developers can also use the compatibility component library, where @tarojs/components-react
will replace @tarojs/components
.
API
Developers refer to the Taro object from @tarojs/taro
and use the API it provides.
In H5 environments, @tarojs/taro
takes platform-independent APIs from @tarojs/api
and APIs that follow the mini program specification from @tarojs/taro-h5
, and finally aggregates them into a Taro object to expose to developers.
Developers typically call the API as
Taro.xxx
. Thebabel-plugin-transform-taroapi
plugin converts this toimport { xxx } from '@tarojs/taro';
and then calls it again to ensure that Tree Shaking takes effect.
Router
@tarojs/router
Implemented a routing library that follows the mini program specification.
Typings
Taro's Typings file is located in @tarojs/taro/types
.
Because the APIs for the various mini program are updated quickly, Typings are very much in need of community help to maintain them.
Reverse conversion
Reverse conversion, native WeChat mini program conversion to Taro, currently supports conversion to React.
Reverse conversion is divided into two modules, compile-time and runtime, located in @tarojs/taroize
and @tarojs/with-weapp
respectively.