Skip to content
目录

07 — 与 uni-app 等方案的横向对比

说明:uni-app 源码不在本仓库内,下表基于 公开架构信息 与 Taro 本仓库可验证实现 对比;建议表述为「典型差异」,避免绝对化。

1. 目标与边界

维度Taro(本仓库)uni-app(业界常见描述)
主战场强依赖 React / Vue / Solid 等真实框架语义;小程序是「另一宿主」Vue 为主(vue2/3),另支持部分其他写法;跨端历史更久
DSL业务代码即框架代码(JSX/SFC)单文件 .vue + 条件编译(#ifdef)常见
渲染小程序:自定义运行时 + 模板 + setData;H5:更接近标准 Web小程序:Vue runtime 定制 + 模板;H5:Web

2. 「一套语法 → 各端源码」在实现上的差异

Taro(可引用本仓库)

  1. JS/TS:Babel(Webpack)或 esbuild(Vite)转译 + bundler 打包。
  2. UI 树:框架通过 Reconciler / universal renderer 操作 Taro 实现的类 DOM
  3. 视图数据hydrate 把节点树变成 小程序 data 协议,模板(shared 生成)负责 如何绑定
  4. 样式:PostCSS 链按端转换单位与资源;class/style 进 data(见 template.tsstyles 映射)。

uni-app(概念层)

  1. 编译期 更多把 Vue template 转到 小程序 template,script 侧运行 裁剪后的 Vue runtime
  2. 条件编译 在预处理阶段删掉部分代码,实现端差异(Taro 更常用 运行时 API 抽象 + 平台包;也有 process.env.TARO_ENV 等模式)。

总结句:Taro 3+ 强调 「框架完整 + 宿主薄适配层」;uni-app 传统上更偏 「以 Vue 为轴心的编译转换」

3. 生态与扩展

  • Taro:插件内核 Kernel + platform-* 分包;官方 RFC 流程(见根 README)。
  • uni-appuni_moduleseasycom、更重的 DCloud 工具链一体(CLI、HBuilderX)。

4. 选型启发(非拉踩)

  • 团队 React 技术栈、需要 react-reconciler 级语义 → Taro 更自然。
  • 团队 Vue 为主、强依赖 条件编译与 uni 生态物料 → uni-app 往往更省整合成本。
  • 鸿蒙 / RN 等:两者都在演进,需看 当前版本平台包成熟度(本仓库可见 taro-platform-harmonytaro-rn 多条线)。

5. 可追溯的 Taro 依据(答「你怎么知道 Taro 这么干的」)

  • 模板两维度注释:packages/shared/src/template.ts 文首。
  • React 接入:packages/taro-react/src/reconciler.ts
  • setData 调度:packages/taro-runtime/src/dom/root.ts
  • 编译器只认 webpack5/vite:packages/taro-service/src/platform-plugin-base/platform.ts

参考资料

MIT License.