uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架。
主要特点:
1.跨平台能力
一套代码可以发布到 iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝等)等多个平台
2.基于 Vue.js
使用 Vue.js 语法,开发者可以快速上手
支持 Vue 的组件化开发模式
3.开发效率高
只需编写一套代码,就能生成多个平台的版本
大大降低了多端开发的成本和维护难度
4.丰富的生态
提供了大量的 UI 组件库和插件
有完善的开发工具和调试工具
5.原生体验
通过编译到各平台原生代码,提供接近原生的性能和体验
uni-app 和 Vue 的联系与区别
联系
1.语法基础相同
uni-app 基于 Vue.js 构建,使用 Vue 的模板语法、响应式数据、组件系统等核心概念
你可以用写 Vue 的方式写 uni-app
2.开发体验一致
都支持单文件组件(.vue 格式)
都使用 data、methods、computed、watch 等选项
都支持生命周期钩子(如 created、mounted 等)
3.生态兼容
uni-app 可以使用大部分 Vue 的第三方库
组件化思想完全一致
区别

uni-app 的核心原理
核心架构原理
Vue.js 代码(开发者编写)
↓
uni-app 编译器
↓
条件编译处理
↓
┌────────┬────────┬────────┐
↓ ↓ ↓ ↓
H5 iOS Android 小程序
(Vue) (原生) (原生) (各平台框架)
关键技术机制
1. 统一的标准层(Standard Layer)
uni-app 定义了一套跨平台的标准 API 和组件规范:
标准组件:<view>、<text>、<image> 等
标准 API:uni.request()、uni.navigateTo() 等
这些标准在各平台上保持一致的接口,但底层实现不同。
2. 差异化编译(Conditional Compilation)
uni-app 使用 条件编译 技术,根据不同平台生成不同的代码
3. 运行时适配层(Runtime Adapter)
每个平台都有对应的适配器,将 uni-app 的标准调用转换为平台原生实现
组件映射原理
uni-app 的组件在不同平台会被映射为对应的原生组件:
uni-app H5 小程序 App
─────────────────────────────────────────────
<view> → <div> → <view> → UIView/View
<text> → <span> → <text> → UILabel/TextView
<image> → <img> → <image> → UIImageView
<button> → <button> → <button> → UIButton
API 适配原理
// 开发者调用
uni.request({
url: 'https://api.example.com',
success: (res) => { }
})
// 底层自动适配
// H5: 转换为 fetch() 或 XMLHttpRequest
// 小程序: 转换为 wx.request()
// App: 转换为原生网络请求库
完整编译流程
1. 解析阶段
└─ 解析 .vue 文件,提取 template、script、style
2. 条件编译阶段
└─ 根据目标平台,过滤 #ifdef/#ifndef 代码块
3. 转换阶段
├─ 模板转换:uni 组件 → 平台组件
├─ 样式转换:处理平台兼容性
└─ 脚本转换:uni API → 平台 API
4. 打包阶段
├─ H5: webpack 打包
├─ 小程序: 按平台规范打包
└─ App: 编译为原生安装包
1. 解析阶段
└─ 解析 .vue 文件,提取 template、script、style
2. 条件编译阶段
└─ 根据目标平台,过滤 #ifdef/#ifndef 代码块
3. 转换阶段
├─ 模板转换:uni 组件 → 平台组件
├─ 样式转换:处理平台兼容性
└─ 脚本转换:uni API → 平台 API
4. 打包阶段
├─ H5: webpack 打包
├─ 小程序: 按平台规范打包
└─ App: 编译为原生安装包
局限性
不是所有 Vue 特性都支持(如某些 DOM 操作)
平台差异无法完全消除(需要写条件编译代码)
性能不如纯原生(特别是复杂动画场景)
新平台支持有延迟(需要开发对应的适配器)
1592

被折叠的 条评论
为什么被折叠?



