uni-app 之 跨平台开发

uni-app 之 跨平台开发_第1张图片

一、概念

1. 原生 VS 跨平台

原生开发

优点

性能稳定,使用流畅,用户体验好、功能齐全,安全性有保证,兼容性好 ,可使用手机所有硬件功能等

缺点

开发周期长、维护成本高、迭代慢、部署慢、新版本必须重新下载应用
不支持跨平台,必须同时开发多端代码

跨平台开发

优点

  • 可以跨平台,一套代码搞定iOS、Android、微信小程序、H5应用等

  • 开发成本较低,开发周期比原生短

  • 适用于跟系统交互少、页面不太复杂的场景

缺点

  • 对开发者要求高,除了本身JS的了解,还必须熟悉一点原生开发

  • 不适合做高性能、复杂用户体验,以及定制高的应用程序。比如:抖音、微信、QQ等

  • 同时开发多端兼容和适配比较麻烦、调试起来不方便

2. 跨平台框架对比

uni-app 之 跨平台开发_第2张图片

3. 认识uni-app

uni-app 之 跨平台开发_第3张图片

4. uni-app VS 微信小程序

相同点

  • 都是接近原生的体验、打开即用、不需要安装

  • 都可开发微信小程序、都有非常完善的官方文档

不同点

  • 跨平台

  • uni-app : 支持跨平台,编写一套代码,可以发布到多个平台

  • 微信小程序 : 不支持

  • 工程化

  • uni-app : 纯Vue体验、高效、统一、工程化强

  • 微信小程序 : 工程化弱、使用小程序开发语言

  • 复杂程度

  • uni-app : 适合不太复杂的应用,因为需要兼容多端,多端一起兼容和适配增加了开发者心智负担

  • 微信小程序 : 适合较复杂、定制性较高、兼容和稳定性更好的应用

如何选择

需要跨平台、不太复杂的应用选 uni-app,复杂的应用使用uni-app反而增加了难度。
不需要跨平台、较复杂、对兼容和稳定性要求高的选原生微信小程序

5. uni-app架构图

uni-app 之 跨平台开发_第4张图片

二、uni-app初体验

1. 开发工具

Hbuilder X : 是通用的前端开发工具,但为 uni-app 做了特别强化
网址 : hbuilderx

ps : 用Vue3的Composition API 建议用 HBuilder X最新Alpha版,旧版有兼容问题

2. 创建项目

可视化界面创建 ( 推荐 )

  • 点工具栏里的文件 -> 新建 -> 项目 ( 快捷键Ctrl+N )

  • 选择uni-app类型,输入工程名,选择模板,选择Vue版本,点击创建即可

uni-app 之 跨平台开发_第5张图片

Vue-CLI 命令行创建

uni-app 之 跨平台开发_第6张图片

3. 运行uni-app

在 浏览器 运行

点击工具栏的运行 -> 运行到浏览器 -> 选择浏览器
uni-app 之 跨平台开发_第7张图片

在 微信开发者工具 运行

如果自动启动失败,可用微信开发者工具手动打开项目
项目在unpackage/dist/dev/mp-weixin路径下

01 - 开启服务端口

微信开发者工具需要开启服务端口:
小程序开发工具设置 -> 安全(目的是让HBuilder可以启动微信开发者工具)
uni-app 之 跨平台开发_第8张图片

02 - 运行

uni-app 之 跨平台开发_第9张图片

在 手机或模拟器 运行

这里是mac电脑 + ios手机环境

ps : 之所以要用XCode新建一个项目,先打开模拟器,再用hbuilderx打开相同的模拟器
是为了减少bug,不这么做容易有奇奇怪怪的小问题

XCode 设置

01 - 安装XCode
uni-app 之 跨平台开发_第10张图片
02 - 新建Xcode项⽬
uni-app 之 跨平台开发_第11张图片
03 - 选择项⽬类型
uni-app 之 跨平台开发_第12张图片
04 - 填写项⽬信息
uni-app 之 跨平台开发_第13张图片
05 - 选择路径
uni-app 之 跨平台开发_第14张图片
06 - 启动Xcode项⽬生成一个IOS模拟器
uni-app 之 跨平台开发_第15张图片
07 - 运⾏Xcode项⽬的效果
uni-app 之 跨平台开发_第16张图片

Hbuilderx-Alpha 设置

01 - 安装手机模拟器插件
uni-app 之 跨平台开发_第17张图片
02 - 配置adb路径(可跳过)
可不配 : 不配会自动去寻找默认的
  • HBuilderX正式版adb目录位置 :

  • windows : 安装路径下的 tools/adbs 目录

  • mac : HBuilderX.app/Contents/tools/adbs目录;

  • HBuilderX Alpha版的adb目录位置:

  • windows : 安装路径下的 plugins/launcher/tools/adbs 目录

  • mac下 : /Applications/HBuilderX-Alpha.app/Contents/HBuilderX/plugins/launcher/tools/adbs目录

  • 在adbs目录下运行./adb ,即可使用adb命令(Win和Mac一样)

03 - 选择模拟器
uni-app 之 跨平台开发_第18张图片
04 - 选择模拟器
uni-app 之 跨平台开发_第19张图片
05 - 效果
uni-app 之 跨平台开发_第20张图片
有个很严重的问题,我的这样没有热更新,每次改完得重新运行,我要崩溃,有没有大佬指点迷津

ios模拟器问题 : 未修复

uni-app 之 跨平台开发_第21张图片

三、uni-app的架构和配置

1. 目录结构

uni-app 之 跨平台开发_第22张图片

2. 开发规范

为了实现多端兼容,综合考虑编译速度、运行性能等因素,uni-app 约定了如下开发规范:
  • 页面文件遵循

  • Vue 单文件组件 (SFC) 规范

  • 组件标签靠近小程序规范

  • uni-app 组件规范 => 使用小程序的标签

  • 接口能力(JS API)

  • 靠近微信小程序规范 => 但需将前缀 wx 替换为 uni

  • uni-app接口规范

  • 数据绑定及事件处理

  • 同 Vue.js 规范 => 例如使用@click

  • 生命周期

  • 可用小程序的

  • 也可用vue的

  • 为兼容多端运行

  • 建议使用flex布局

  • 推荐使用rpx单位

  • uni-app的官网文档

  • uni-app官网文档

3. main.js

main.js是 uni-app 的入口文件,主要作用是:
  • 初始化vue实例

  • 定义全局组件

  • 定义全局属性

  • 安装插件,如:pinia、vuex 等

01 - 初始化vue实例

uni-app 之 跨平台开发_第23张图片

02 - 定义全局组件

import { createSSRApp } from 'vue'

//引入组件
import myComponent from './components/my-component/my-component.vue'

export function createApp() {
  const app = createSSRApp(App) 
  //调用app.component方法全局注册组件
  app.component('my-component', myComponent)
  return {
    app
  }
}

03 - 定义全局属性

// vue2
Vue.prototype.$http = () => {}

// vue3
export function createApp() {
  const app = createSSRApp(App);
  app.config.globalProperties.$http = () => {}
  return {
      app
  }
}

04 - 安装插件,如:pinia、vuex 等

import { createSSRApp } from 'vue'
// 当然这里要自己先封一下 Pinia
import pinia from '.stores'
export function createApp() {
  const app = createSSRApp(App);
    app.use(pinia);
    return {
      app
      Pinia // 此处必须将 Pinia 返回
  }
}

4. App.vue

App.vue : 入口组件
  • App.vue是uni-app的入口组件,所有页面都是在App.vue下进行切换

  • App.vue本身不是页面,这里不能编写视图元素,也就是没有