Weex 是一套简单易用的跨平台开发方案,能以 web 的开发体验构建高性能、可扩展的 native 应用,为了做到这些,Weex 与 Vue 合作,使用 Vue 作为上层框架,并遵循 W3C 标准实现了统一的 JSEngine 和 DOM API,这样一来,你甚至可以使用其他框架驱动 Weex,打造三端一致的 native 应用。
#简介 2016年6月开源
Weex的前身是WeApp,一个用JSON配置原生UI组件来实现动态化的框架,开源之后 github 上面提交的记录,大部分工作都是 Vue 框架解析成原生组件的代码,原生组件早就写完了。
2017年2月成为 apache 孵化项目
#weex 三端一致的实现 Weex的工作原理 三端一致的实现
使用 webpack 编译源文件,编译成一段 JavaScript 代码,生成两个 JS bundle。
针对 Web 平台,依然使用 Webpack + vue-loader 的方式编译 .vue 文件,针对 Android 和 iOS 平台,使用 Webpack + weex-loader 生成 native framework 能解析的 js bundle 格式。
三端一致的实现方式大体清除了,就是三端抽象出相同的组件分别实现。 缺点:
- 具体表现是否一致取决于三端组件实现的质量。
- 能使用的组件数量比较有限。 优点:
- 可以同一个组件三端不同方式实现,能体现平台的特性。
- 实现组件时,能够针对各个平台进行优化,性能更好。
编写 weex 项目
使用内建组件
内建组件是官方对常用的项目组件进行抽象,能够完成常用 UI 渲染。 內建组件用来代替常用的 html 标签。也就是说,在编写 vue 源文件的时候,必须使用 weex 提供的内置组件标签,不能使用标准的 html 标签。
使用 CSS 编辑样式
- 符合 CSS 盒模型
- 支持常用的 CSS 属性
- 对 Flexbox 布局支持的比较好。
使用內建模块
內建模块是官方对常用功能的封装,通常与 native 操作相关。
自定义组件和模块
weex 扩展可以编写 component 和 model
component 概念与 Vue 中的 component 概念相似,并且现在也推荐使用 weex 提供的组件,使用 Vue 编写单文件组件的方式来扩展组件。如果存在 weex 提供的基础组件无法达到要求的情况,就需要三端分别编写组件注册到 weex 并使用。
model 更像是 Javascript 与 native 互相调用的接口。
页面跳转
-
使用 vue-router 控制页面跳转。 weex 可以与 vue-router一起工作,但是在 Android 和 iOS 中都没有浏览器的 History API,也不存在 DOM,所以只能使用 abstract 模式进行跳转
-
使用 weex 提供的 WXModel——navigator 进行页面跳转 navigator 跳转,是不同的 JSBundle 之间进行跳转。在实际使用的时候,可以通过配置文件让 webpack 将源文件打包成多个 JSBundle,跳转方便,加载也更迅速。
WXComponent 组件,做显示用,需要三端分别实现 WXModel 模块,提供功能,也需要三端分别实现(可能具体实现方式不一样,因为涉及到平台相关特性)
项目打包
weex 打包是使用 webpack 讲解 webpack 打包,生成两个 JSBundle。一个是用 vue-loader 生成,使用 Vue 解析的 JSBundle,用于 Web 平台渲染;一个是用 weex-vue-loader 生成的,供 iOS 和 Android 的 Framework 解析的 JSBundle,用于 Native 渲染。
调试使用 Node.js 做服务器
npm 管理模块
-
简易跑步 app weex 项目 iOS weex 项目 Android
-
尚妆旗下一款 app 的购物车 weex 项目 Android 最常见的形式——列表展示
与 Native 功能深度整合——提供了相应解决方案,但是开发成本比 Native 实现相比要高一些。 难以做到 H5 与 Native 表现一致(例如手势操作)
复杂样式展示——远远不如 H5 灵活(受限于 CSS 解析器)
weex 可以实现三端一致的高性能渲染 weex 开发成本略高于 H5,低于 Native Vue 作为前端框架,上手容易,MVVM 架构,架构成熟,封装良好 有官方的插件商城,方便获取插件,如果开发者数量足够,会大大丰富 weex 的组件。 在 Native 端,图片请求,异步加载等是 Native 实现的,离线、缓存、异常处理能力强大。 可以在 app 内置 JSBundle 或者图片,提升用户第一印象。
项目不够成熟,需要继续发展一段时间 国产项目通病,部分代码(例如实现 Flex 布局的布局引擎,是从 ReactNative 中借鉴来的) 阿里维护 weex 的决心尚需要考量
RN, Weex, PWA, Android Instant App, 小程序。 1.轻量级 2.动态化