大前端跨平台方案调研
写在前面
当团队业务大方向可预见,但细枝末节需要敏捷迭代,且公司希望开源节流。此时跨平台方案就可以提上日程了。首先要明白一点,任何框架或者设计方案,永远没有最好的。因地制宜,适合自己团队的,适合近期业务迭代周期的方案才是最好的。强扭的瓜不甜。本文主要针对各个跨平台框架的特性和支持情况进行对比。
应用场景
框架基本信息和平台支持情况 (H5默认支持)
| 框架 | 团队 | 语言 | iOS | Android | Mac桌面端 | Windows桌面端 | 微信小程序 | 其他小程序 | 是否收费 |
|---|---|---|---|---|---|---|---|---|---|
| Flutter | Dart | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | |
| uni-app | DCloud | Vue/JS | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ |
| RN | React/JS | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | |
| Donut | JS | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | |
| NativeScript | JS | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | |
| Compose | JetBrains | Kotlin | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Capacitor | Ionic | JS | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| Electron | JS | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | |
| Taro | 58,安居客 | JS | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
框架使用情况 (1-10,数字越大代表越好。中位数5代表能用) - 代表没有实践过
| 框架 | 社区活跃 | 性能(移动端上) | 热更新 | 热重载 | 发布舒适度 |
|---|---|---|---|---|---|
| Flutter | 10 | 8 | ✅ | 9 | |
| uni-app | 8 | 8 | ✅ | 9 | |
| RN | 5 | ✅ | |||
| Donut | 10 | - | - | ||
| NativeScript | 4 | ✅ | - | ||
| Compose | 4 | ✅ | - | ||
| Capacitor | 4 | ✅ | - | ||
| Electron | 7 | ❌ | - | ||
| Taro | 5 | ✅ | - |
链接🔗
| Flutter | uni-app | RN | Donut | NativeScript | Compose | Capacitor | Electron | Taro |
|---|
我的需求
| 平台 | 应用A | 应用B | 应用C | 应用D | 应用E | 应用F | 应用G | 应用H | 应用I | 应用J |
|---|---|---|---|---|---|---|---|---|---|---|
| 微信小程序 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| iOS APP | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Android APP | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Web | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |
| PC端 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
我的选择
团队资源
- 资深安卓开发 * 1
- 资深iOS开发 * 1
- 资深前端开发(Vue方向) * 2
- 资深前端开发(React方向) * 2
方案分析
[!IMPORTANT]
- 首先看团队资源,移动端和Web都有资深开发,这在各自领域的原生开发没有问题,意味着当跨平台方案遇到问题时,有懂行的同学可以牵头。
- 然后看业务应用在各个终端的分布情况,整体偏向iOS、Android、微信小程序。各个平台都有的业务适合跨平台方案。
- 综上所述,应用A、应用C、应用F适用跨平台方案。
代码实现
TODO: