vue3中main.js
该代码是uni-app项目的入口文件,通过条件编译同时支持Vue 2和Vue 3两种版本。Vue 2部分使用new Vue()创建实例并手动挂载,包含uni-app的API Promise化适配器;Vue 3部分则通过createSSRApp()创建SSR应用并导出工厂函数。条件编译指令#ifdef/#ifndef根据项目配置决定编译哪部分代码,实现在同一项目中维护双版本支持,确保代码兼容性和版本
·
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 两个版本
版本差异
- 创建方式不同:Vue 2 使用
new Vue(),Vue 3 使用createSSRApp() - 导出方式不同:Vue 2 直接创建实例,Vue 3 导出工厂函数
- API 不同:Vue 3 使用 Composition API,需要不同的初始化方式
这样的设计让项目可以在不同 Vue 版本间轻松切换,同时保持代码的兼容性。
更多推荐

所有评论(0)