从 DCloud 到 React Native ( Weex 从入门到放弃 )

前言

好多人学习的时候都会记笔记,像我这种从不记笔记的,能写点东西也很不容易。。 众所周知,我是个以后端为主的,当然自己写东西,肯定不能是写点 php 就满足了。从纯原生代码写 php 到初学 ThinkPHP ,过了两年终于走进了 Laravel 的世界。关于前段的方向也从原生 js 到 jQuery 到响应式布局,从 html 到 h5 再到 Android 原生过渡到小程序最后到了 js 混合开发。关于 php 的经历有点多,今天主要想说的是,在 js 混合开发的探索阶段遇到的各种大坑和技术选型的经历。

技术选型

其实所谓的技术选型,无非是觉得哪个好用,哪个适合我去开发而已。 最近想做点小玩意(写代码能作为一种爱好我还是很开心的),自然想到了 App 。从这个角度开始,去选择一个合适的框架。 一开始有如下几种方案:

  1. Android & iOS 原生开发。Android 原生倒是做过,毕竟至少毕设就是 Android 端的,但也不是很熟。iOS 的呢,就比较陌生了,毕竟,苹果设备都是 17 年末我才开始接触的。之前闲得慌注册了个 iOS 的 Developer Membership ,但一直没有接触过。
  2. ApiCloud。之前创业的时候,自己的 App 就是用 ApiCloud 实现的。据 DCloud 官网讲,ApiCloud 的技术大部分是从他们那里窃取的,这个我们倒是不关心。因为在我的开发之路上,这两个的实现方式还是有很大差别的。
  3. DCloud。之前第一次做混合开发时用的就是它。当时还不熟,也是创业而用的一个简单的程序。据他们介绍自己是 w3c+html5plus 中国产业联盟的发起者之一。
  4. Weex。Weex 是阿里巴巴由 2016 年开源的由 vue 进行编写的一种混合式开发框架。2017 年推出了 Weex Market 市场,但是域名解析貌似有些问题。2018 年由飞猪开源了自己所用的 UI 框架 —— Weex UI。
  5. React Native。简称 rn ,与 Weex 类似,是由 Facebook 发布的,以 React 作为编程语言的框架。但是诞生较早,现在已经迭代到 0.56(为啥到现在还没 1.0)

今天要比较和选型过程的就上述几个,具体内容下面将从使用到放弃一个一个讲。

分门别类

首先说,以下仅代表我个人观点。好与不好,都是自己的认知。我最多呢就是给纠结中的人一些参考,以及一些学什么都学不下去的孩子们一些鼓励。毕竟,我从大一 C 语言结束后的每一行代码都是自己学着写的。 其实目前比较多用户的已经在悄悄转移了,以前一开始的 PhoneGap 等等已经逐渐没有声音了。说回来,人越发展,越趋向社区型的产品。

产品型

产品型有一个显著的特征:收费为主。其实直说,他们是卖产品的,而不是做生态或社区的。因此是一些专做这个的技术公司运营起来的。

  • DCloud

好啦,这次的第一选型就是 DCloud 了。毕竟在将 DCloud 与 APICloud 对比一下,还是前者比较能吹。又产业联盟又各种超级 IDE 的,而且说 APICloud 的技术也是从这儿拿的,是吧。 以下是 DCloud 的官网首页公告。没见法院要求的 APICloud 往首页放,倒是原告一直在摆着。

因为以前也开发过,所以比较有经验。还是下载 HBuilder 开发。什么是 HBuilder 呢?

下载下来,居然跟以前几乎一样。还是 eclipse 的拓展包拼出来的。包含了真机调试,云端打包以及最基本的代码提示等功能。我不知道为什么他能把「护眼模式」说了这么多年,有什么稀奇么。。 开发的路上,初始化项目。然后依旧是右边可以开一个预览,但只能看 html 的内容,有关动态页面还是要跑去 Chrome 里面去看了。然后提供了一个 ui 框架叫做 AUI , 代码逻辑都是 jQuery 的语法。貌似看见过有人将 vue 工程转移到上面做 app。但我知道效果肯定很一般。关于各种登录分享地图等等插件都是集成好的,在工程设置里直接填 token/access_key 什么的就行了。但我毕竟也是接触过原生开发的,我不知道他要求填写微信的 AppSecret 是为什么。。 真机运行的话,用的是 Hbuilder 的基座进行预览。打包发布就不是开发者的事儿了,还是给他开发者 key 什么的就好了 一行代码都没写,决定放弃了。原因如下:

  1. 这种框架还是比较适合前端新手 + Anroid iOS 小白的。而且运行过去,如果不是你主动用 plus.ready中的方法,样式啊元素都是由 Webview 展示的。性能堪忧。包括官网首页介绍的什么底端安卓机显示无线列表,纯骗人的。。由于大部分实现是原生 js,用户体验基本没法提。而他官网所说的用户案例,其实大部分是自己仿制的,以及一些小公司去弄的,纯为了快速迭代。
  2. 理想与差距过大,由于 1 的原因,没办法用自己喜欢的框架去实现内容。要知道,一个天天写模块化开发的人突然跑去写单页实现,很心累的。
  3. 集成度过高,比如刚才所说的微信什么的,其基座真的只是个带所有权限的 Webview 而已。想要拓展自定义的原生功能,难。
  4. IDE 过于不友好。说什么的都没用,基本是想垄断所谓的产业联盟。只能用 Hbuilder 进行开发,而且主动权不控制在自己手里。 放弃。无关复杂度。其实在我看来,更像是一个写好的东西让你去填内容罢了。
  5. APICloud

不细说了,之前是那这个做过一个半完整的 app 的。这次也尝试了一下,也是一行代码都没写就放弃了。 原因与上述大部分相同,还有几点:

  1. 商业化太严重,比如刚登录进来的弹框:

  2. 据我回忆,这是唯一一个我注册了第二天还会给我打电话的。。

  3. 倒是有我想要的模块市场,可是。。 你见过动不动就要收钱的,代码还要自己写的开发者网站么。。

  4. 自己有一套 ui 库叫 MUI,听起来是不是跟 AUI 很像。 放弃

社区型

其实这个名字也是最近写 rn 的时候看见了介绍的。比如 php、Laravel,ThinkPHP 也算是一个不完整的社区吧。就是开源、大家都可以为之做出贡献,不以盈利为目的,但产品质量是由大家一起维护的,因此,你懂的。因此,从 Laravel 之后,便越来越倾向于社区型的产品了。其实以前就听说过 react native 的大名了,但是对其有一些误解,以为其在 Android 和 iOS 每次调用原生的时候都要分别处理,以及我会用的前端框架也就 vue 了。因此想找找有没其他的。于是,就到了 weex 的了。

  • Weex

刚开始就百度搜索关键字, 「vue」 「app」,大家都在说 Weex。不过也有说其迭代速度已经很慢了的。但是看了看文档,感觉自己对其还是比较有兴趣的。从看一脸懵逼的文档到放弃,居然用了两周的时间。 因为中间一直看到那些说已经不维护的消息,但是对照 github 上的发布时间,前几天还在更新代码。但是版本还没发。而且,网上说阿里系的 app 已经好久没有全应用都用 Weex 的方案了。这点我无从考证。但是初始化后,发现 Android 和 iOS 生成的编译 sdk 版本都好低。再加上我发现社区真的没有做起来。官方没有 issue ,都是 apache 的邮件组(阿里后来吧 weex 交给了 apache 基金会来维护)。而且所谓的插件市场甚至一直都上不去,直到有一次偶然发现好像是其域名重定向出了问题。但是基本也没什么内容。甚至调用原生接口都调不通。包括但不限于微信登录、高德地图等插件,有是有,该过期的都过期了,基本都用不了,最新的提交是 6 个月前。 可以看一下[Weex 和 React Native] 的对比文档。大部分人建议就是,如果从现有应用修改,比较适合用 Weex ,但是从头开发还是 React Native。 对了,还有一个从 Weex 衍生出来的项目, Eros。没有用。。用了那个,好像又回到了 DCloud。 然后经过两周的研究+没有写多少业务代码,一直配置运行环境来着。算了。。放弃了。 即使是阿里开源社区的产品,但是几乎没有人在弄的东西,也就是社区环境最怕的内容——没有支持者。最后,抛下对 React Native 的偏见,走向了人生的道路。 给大家看一下许久没更新的 Weex 文档

  • React Native

目前卡壳在 Android 沉浸式状态栏,一直也不知道这个布局是什么样子的。 前几天用了两个小时差不多看懂了 reactjs,随后便将王妃送了出来。 优点就是

  1. 大社区产品,很多插件都通过热情的开发者们补充了
  2. 自定义项目集成
  3. 视图、网络及存储都接好了原生
  4. JSX 语法,用起来还是比较爽的 更何况,在第一次接触 React 和 React Native 当天,就已经开始搞下 Tab 一样。

太困了,不说了,晚安

补充

现在已经开始用Flutter了。。