小程序跨端/平台框架
两种方案:
- 预编译模式
- 运行时模式
跨平台的内容:
- api,组件:这些都是为了web平台所作的兼容处理;
跨端的内容:
- api:都是可以直接代理端的功能的
小程序跨多端只要处理不对齐的api
; - 组件:
uniapp
- vue是源代码,mini program是目标代码;所以底层重渲染时是setData,vue是dom操作;
构建编译流程(构建工具基于通过vue-cli)
初始化构建工具的配置参数,Service类的实例化;
- 获取package.json的配置;
- 解析应用中使用的vue-cli插件,
/^(@vue\/|vue-|@[\w-]+(\.)?[\w-]+\/vue-)cli-plugin-/
插件名称的规则
获取命令行的命令与参数来决定如何构建;
执行命令;
- 获取环境类型;
- 根据
--skip-plugins
参数初始化需要被跳过的插件; - 加载环境变量,加载用户配置,应用插件,注册命令;
- 验证命令是否存在;
- 执行命令的回调函数;
- 获取配置的webpack配置文件,执行webpack函数,进行编译打包;
编译时插件
webpack
- webpack-uni-mp-loader: 将vue文件编译到小程序文件;
- webpack-uni-pages-loader:生成小程序的./project.config.json文件;
vue-cli
- vue-cli-plugin-hbuilderx: hbuilderX的vue-cli插件,用来编译打包;
- vue-cli-plugin-uni:vue-cli新增命令;
- vue-cli-plugin-uni-optimize:生成代码的优化;
运行时流程(依赖于vue)
- webpack的模块加载系统;
- createApp创建小程序app,createPage创建页面,createComponent创建组件,createSubpackageApp创建子包;
- 根据响应式属性来触发更新,接着重新渲染;
- render不会生成vnode;
- patch对比data而不是vnode,接着调用setData;
功能
- uniapp不会影响直接使用小程序api,
wx.showLoading()
; - 底层自动差量数据更新,简单而高性能;
跨端小程序的区别和重心:
- DSL和多端适配;
小程序架构
逻辑层 Data
视图层 Event
原生能力 JSBridge
声明周期
模板转换
数据映射
事件代理
运行时模拟
- ProvidePlugin,使用webpack插件注入到模块中;
跨端框架编译到小程序
- vue -> wxml wxss js json
- app,page,component
跨端框架中的通用内容
- 组件跨端;
- api跨端;
- 各端的特色;(每个端都会有不同的
uniapp使用了vue的哪些功能?
- 响应式系统;
- 组件化系统;
- slot组件;
- vuex状态管理;
- 生命周期;
没有使用vue的哪些功能?
- vnode: vue在小程序中没有vnode的概念,因为直接是vue模板到mini模板;
- router: 小程序中是页面与页面之间的跳转的,vue是组件与组件;
- diff: 小程序中diff的是data;