Skip to content
目录

08 — 关键设计决策与依据(精简)

编排说明:更细的 问答与编译深挖(原分散在 10~14 稿、小程序/RN/iOS·Android/复杂度/多端/CSSOM 等)已统一收入 09-常见问题.md。本章只保留 决策 + 原因 + 源码锚点,便于与 09 对照。


1. 运行时 + 类 DOM 与 Reconciler

决策:Taro 3 起在逻辑层 模拟 DOM,用 react-reconciler 操作 TaroElement,再 hydrate + 静态模板 + setData 对接宿主。
依据packages/taro-react/src/reconciler.tspackages/taro-runtime/src/hydrate.ts

2. 模板:递归 × WXS/SJS

决策shared/src/template.ts 将宿主差异抽象为 模板是否可自递归是否用 XS/SJS;非递归用 baseLevel + comp
依据template.ts 文首注释。

3. setData:setTimeout 合并

决策TaroRootElement.scheduleTasksetTimeout,避免微任务导致 连续 setData
依据packages/taro-runtime/src/dom/root.ts

4. 编译器:webpack5 / vite / RN 分叉

决策VALID_COMPILER = ['webpack5','vite']RN 独立 Metro,不经 compiler 字段。
依据packages/taro-service/src/platform-plugin-base/platform.tspackages/taro-rn-runner/src/index.ts

5. 入口与平台补丁

决策taro-loader 收口 createPageConfig + PagehostConfig.mergeReconciler 注入平台差异。
依据packages/taro-loader/src/page.tspackages/taro-platform-weapp/src/runtime-utils.ts

6. 预构建

决策:小程序构建前 Prebundle,失败 跳过
依据packages/taro-webpack5-prebundleindex.mini.ts

7. 社区流程

决策:重大功能 RFC;Issue 用 issue helper
依据:本仓库 README.md


延伸阅读

MIT License.