首页
/ Vue3迁移实战:vue-admin-better核心适配指南

Vue3迁移实战:vue-admin-better核心适配指南

2026-02-05 04:06:09作者:郁楠烈Hubert

你是否还在为Vue2项目升级Vue3时遇到的兼容性问题头疼?路由跳转报错、组件渲染异常、状态管理失效?本文将从项目配置、核心代码、组件迁移三个维度,带你一步到位解决vue-admin-better的Vue3适配难题,让你的后台系统体验丝滑升级。

一、核心变化速览

Vue3带来的不仅是性能提升,更有开发模式的革新。最显著的变化包括:

  • Composition API:替代传统Options API,支持更灵活的代码组织方式
  • 响应式系统重构:基于Proxy实现的数据响应,解决Vue2 Object.defineProperty的局限性
  • 生命周期调整:beforeDestroy改为beforeUnmount,destroyed改为unmounted等
  • 模板语法增强:支持多根节点、v-memo指令、 emits选项显式声明事件

项目中需要重点关注的文件路径:

二、项目配置升级

2.1 依赖版本更新

首先需要修改package.json中的核心依赖,将Vue及相关生态升级到兼容版本:

{
  "dependencies": {
    "vue": "^3.4.21",
    "vue-router": "^4.3.0",
    "vuex": "^4.1.0",
    "element-plus": "^2.6.1",
    // 其他依赖...
  }
}

2.2 入口文件改造

原Vue2入口文件src/main.js需要重构为Vue3的createApp语法:

Vue2写法

import Vue from 'vue'
import App from './App'

new Vue({
  el: '#vue-admin-beautiful',
  router,
  store,
  render: h => h(App)
})

Vue3写法

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'

createApp(App)
  .use(router)
  .use(store)
  .mount('#vue-admin-beautiful')

三、路由系统迁移

vue-router 4.x与3.x版本有较大差异,需要修改src/router/index.js

3.1 路由创建方式

Vue2写法

import VueRouter from 'vue-router'
Vue.use(VueRouter)

const router = new VueRouter({
  mode: 'history',
  routes: constantRoutes
})

Vue3写法

import { createRouter, createWebHistory } from 'vue-router'

const router = createRouter({
  history: createWebHistory(),
  routes: constantRoutes
})

3.2 路由守卫调整

全局前置守卫中,next()的使用方式变化:

Vue2写法

router.beforeEach((to, from, next) => {
  if (to.path === '/login') next()
  else next('/login')
})

Vue3写法

router.beforeEach((to, from) => {
  if (to.path !== '/login') return '/login'
})

四、组件迁移实战

以侧边栏组件layouts/VabSideBar/index.vue为例,展示Vue2到Vue3的改造过程:

4.1 选项式API转组合式API

Vue2写法

export default {
  name: 'VabSideBar',
  data() {
    return { uniqueOpened }
  },
  computed: {
    ...mapGetters(['collapse', 'routes'])
  }
}

Vue3写法

import { computed, useStore } from 'vue'

export default {
  name: 'VabSideBar',
  setup() {
    const store = useStore()
    const collapse = computed(() => store.getters['settings/collapse'])
    const routes = computed(() => store.getters['routes/routes'])
    
    return { collapse, routes }
  }
}

4.2 模板语法调整

Vue3支持多根节点,且移除了v-on.native修饰符:

Vue2写法

<template>
  <div class="side-bar-container">
    <el-menu @select.native="handleSelect">
      <!-- 菜单内容 -->
    </el-menu>
  </div>
</template>

Vue3写法

<template>
  <el-scrollbar class="side-bar-container">
    <el-menu @select="handleSelect">
      <!-- 菜单内容 -->
    </el-menu>
  </el-scrollbar>
</template>

侧边栏组件效果示意图

五、常见问题解决方案

问题场景 解决方案 涉及文件
过滤器失效 使用计算属性或全局函数替代 src/utils/index.js
事件总线移除 使用mitt库实现跨组件通信 src/plugins/index.js
Vuex语法变化 安装vuex@4.x,调整模块注册方式 src/store/index.js
Element UI不兼容 升级为Element Plus src/plugins/element.js

六、迁移步骤总结

  1. 环境准备:更新package.json依赖,安装Vue3及配套库
  2. 入口改造:重构main.js,使用createApp API
  3. 路由升级:迁移到vue-router 4.x,调整路由创建方式
  4. 组件迁移:按页面优先级逐步将Options API改为Composition API
  5. 状态管理:适配Vuex 4.x,调整模块导入方式
  6. 测试验证:重点测试src/views/index/index.vue等核心页面

通过以上步骤,即可完成vue-admin-better的Vue3迁移。迁移过程中建议使用官方提供的迁移构建工具,逐步解决兼容性问题。

项目完整迁移示例可参考README.md中的高级配置章节,如有疑问欢迎在项目仓库提交issue交流。

登录后查看全文
热门项目推荐

项目优选

收起
docsdocs
暂无描述
Dockerfile
703
4.51 K
pytorchpytorch
Ascend Extension for PyTorch
Python
567
693
atomcodeatomcode
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get Started
Rust
547
98
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
957
955
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
411
338
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.6 K
940
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.08 K
566
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
128
210
flutter_flutterflutter_flutter
暂无简介
Dart
948
235
Oohos_react_native
React Native鸿蒙化仓库
C++
340
387