import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
  ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
// #endif

这段代码是 uni-app 项目的入口文件,它使用了条件编译来同时支持 Vue 2 和 Vue 3 两个版本。

代码结构分析

1. 公共部分

import App from './App'
  • 导入根组件 App,这是 Vue 应用的入口组件

2. Vue 2 部分(#ifndef VUE3

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
  ...App
})
app.$mount()
// #endif

解释:

  • #ifndef VUE3 表示 “如果没有定义 VUE3”,即使用 Vue 2 时编译这部分代码
  • import Vue from 'vue' - 导入 Vue 2 库
  • import './uni.promisify.adaptor' - 导入 uni-app 的 API Promise 化适配器
  • Vue.config.productionTip = false - 关闭生产环境提示
  • App.mpType = 'app' - 设置应用类型为小程序应用
  • new Vue({...App}) - 创建 Vue 2 实例
  • app.$mount() - 手动挂载应用

3. Vue 3 部分(#ifdef VUE3

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
// #endif

解释:

  • #ifdef VUE3 表示 “如果定义了 VUE3”,即使用 Vue 3 时编译这部分代码
  • import { createSSRApp } from 'vue' - 导入 Vue 3 的 SSR 创建方法
  • createSSRApp(App) - 创建支持 SSR 的 Vue 3 应用实例
  • 导出 createApp 函数,这是 Vue 3 的标准做法

条件编译机制

  • #ifdef / #ifndef 是 uni-app 的条件编译指令
  • 编译时根据项目配置决定保留哪部分代码
  • 这样可以在同一项目中维护 Vue 2 和 Vue 3 两个版本

版本差异

  1. 创建方式不同:Vue 2 使用 new Vue(),Vue 3 使用 createSSRApp()
  2. 导出方式不同:Vue 2 直接创建实例,Vue 3 导出工厂函数
  3. API 不同:Vue 3 使用 Composition API,需要不同的初始化方式

这样的设计让项目可以在不同 Vue 版本间轻松切换,同时保持代码的兼容性。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐