vue2+js项目升级vue3项目流程

Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有了显著的提升。升级到 Vue 3 可以让你的项目受益于这些改进。但是,升级过程也需要谨慎,因为涉及到代码的重构和潜在的兼容性问题。

1. 升级前的准备

  • 备份项目: 在开始升级之前,务必备份你的项目,以防万一。
    • 使用git的话,切记在新的分支,待测试文档后再合并
  • 了解 Vue 3 的新特性和差异: 熟悉 Vue 3 的新特性,如 Composition API、Teleport、Suspense 等,以及与 Vue 2 的主要差异。
  • 选择合适的升级方式: 可以选择渐进式升级(逐步替换组件)或一次性大规模升级,根据项目规模和复杂度来决定。
    • 如果选择渐进式,从根组件组件开始,把它用到的子组件全部升级;但我发现渐进式有点问题,最好是一次性的升级完,不然有些小bug如果没e2e测试都发现不了的
    • 关于版本,如果决定升级,可以一步步来,最好卡vue小版本,2.6 -> 2.7 有大变动
      • 例如我卡在这个版本然后升级的

            "vue": "2.6.10",

            "vue-router": "~3.5.1",

            "vuex": "~3.6.2"

2. 升级步骤

2.1 升级依赖
  • 更新 Vue 和相关依赖:package.json 中的 Vue 和其他依赖(如 Vue Router、Vuex)升级到最新版本。
    • 还可以利用vite create,创建一个新项目,然后把组件慢慢挪过去
  • 处理依赖冲突: 升级过程中可能会遇到依赖冲突,需要仔细分析并解决。
2.2 迁移组件
  • 使用 Composition API: 将 Vue 2 的 Options API 逐步迁移到 Vue 3 的 Composition API,以获得更好的代码组织和复用性。
    • 这部分可选,其实vue3依旧支持配置的组件
  • 调整模板语法: 适配 Vue 3 的模板语法变化,如 v-model 的用法、teleport 的使用等。
    • 需要注意v-model的自定义绑定
    • 需要注意slot (这个很重要,之前没注意就导致了内容丢失)
  • 处理自定义指令和过滤器: 迁移自定义指令和过滤器,注意 Vue 3 中的写法变化。
    • 过滤器 | 已经移除
    • 自定义指令不太建议用 - 不然迁移到别的框架可用部分比较少了,建议用ref拿到引用后处理
2.3 迁移全局 API
  • 替换全局 API: Vue 3 移除了一些全局 API,需要找到替代方案。
    • vue3建议组合式开发不依赖this,所以最好是把this.xxx去掉,而是用一个模块导出方法
  • 使用 provide/inject: 对于全局状态管理,可以考虑使用 provide/inject 或 Vuex
    • 这部分强烈建议,使用reactive + provide/inject管理状态
2.4 迁移路由和状态管理
  • 升级 Vue Router 和 Vuex: 将 Vue Router 和 Vuex 升级到与 Vue 3 兼容的版本。
    • 不太建议使用状态管理了,不然升级vue4可能会很麻烦,😄 
  • 调整配置: 根据新版本的文档,调整路由和状态管理的配置。
    • 需要注意如果用推荐的vite,环境变量的获取变了,需要用import.meta.env代替process.env
2.5 迁移 TypeScript
  • 更新 TypeScript 配置: 如果项目使用 TypeScript,需要更新 tsconfig.json 配置,以支持 Vue 3 的类型定义。
2.6 迁移测试代码
  • 更新测试用例: 调整测试用例,以适应 Vue 3 的变化。
    • e2e测试不用怎么变,单元测试可能变动工作量挺大的

3. 注意事项

  • 渐进式升级: 建议采用渐进式升级,逐步替换组件,降低风险。
  • 充分测试: 在每个升级阶段,都要进行充分的测试,确保功能正常。
  • 注意兼容性: 如果项目需要支持老版本的浏览器,需要注意兼容性问题。
  • 利用官方文档和社区资源: Vue 官方文档提供了详细的升级指南和示例,社区也有很多相关的讨论和解决方案。
  • 考虑使用工具: 可以使用一些工具来辅助升级,如自动化代码转换工具。

4. 常见问题

  • 组件通信: Vue 3 提供了 Composition API 和 provide/inject 等方式来实现组件通信,可以根据具体需求选择合适的方式。
  • TypeScript: 升级到 Vue 3 后,TypeScript 的配置可能需要调整,以支持新的类型定义。
  • 性能优化: Vue 3 在性能方面有显著的提升,可以进一步优化项目的性能。
  • 构建分包: Vue3 分包不支持webpackChunkName指定分包,需要通过vite-rollup的mamualChunk指定包名,不然每个import()方式的引用模块都会是个单独的包

总结

升级到 Vue 3 是一个值得投入的过程,它可以为你的项目带来更好的开发体验和性能。在升级过程中,需要仔细规划、逐步推进,并注意可能遇到的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/54144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mapsui:一个 .NET 开源的地图组件库

前言 今天大姚给大家分享一个.NET开源(MIT License)、免费、同时支持多平台框架(MAUI、WPF、Avalonia、Uno、Blazor、WinUI、Eto、.NET Android 和 .NET iOS)地图组件库:Mapsui。 项目源代码 支持的UI框架的NuGet包 创…

车市状态喜人,国内海外“两开花”

文/王俣祺 导语:随着中秋假期告一段落,“金九”也正式过半,整体上这个销售旺季的数据可以说十分喜人,各家车企不是发布新车、改款车就是推出了一系列购车权益,充分刺激了消费者的购车热情。再加上政府政策的鼎力支持&a…

828华为云征文|部署在线文件管理器 Spacedrive

828华为云征文|部署在线文件管理器 Spacedrive 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 计费模式 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Spacedrive3.1 Spacedrive 介绍3.2 Docker 环境搭建3.3 Spac…

MFC获取网页的html文本

使用 CInternetSession 类和 CHttpFile 类&#xff1b; 在stdafx.h中加入 #include <afxinet.h> &#xff1b; 基本的代码如下&#xff0c; void CMFCApplication3Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码try{CInternetSession session;CH…

Java创建教程!(*  ̄3)(ε ̄ *)

Java 构造函数 Java面向对象设计 - Java构造函数 构造函数是用于在对象创建后立即初始化对象的代码块。 构造函数的结构看起来类似于一个方法。 声明构造函数 构造函数声明的一般语法是 <Modifiers> <Constructor Name>(<parameters list>) throws <…

用户体验不好的网站都有哪些特点?

用户体验不好的网站通常具有一些共同的特点&#xff0c;这些特点会显著影响用户的浏览体验和满意度。下面详细介绍用户体验不好的网站的多个方面&#xff1a; 用户体验不好的网站都有哪些特点&#xff1f; 页面加载时间过长 用户等待时间长&#xff1a;如果一个网站的页面加载…

[Redis][Redis简介]详细讲解

目录 1.认识 Redis2.Redis 特性1.速度快2.基于键值对的数据结构的服务器3.丰富的功能4.简单稳定5.客户端语言多6.高扩展性7.持久化(Persistence)8.主从复制9.⾼可⽤和分布式 3.Redis 使用场景1.数据库2.Cache3.消息队列 4.注意 1.认识 Redis Redis是⼀种基于键值对(Key-Value)…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3566移植案例(下)

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——轻量系统STM32F407芯片移植案…

PyQt5-QCheckBox-开关按钮

效果预览 实现代码 from PyQt5.QtWidgets import QCheckBox, QApplication, QWidget, QVBoxLayout from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QEasingCurve, pyqtProperty from PyQt5.QtGui import QPainter, QColor, QPen, QFontclass CompactSwitchCheckbox…

《Google软件测试之道》笔记

介绍 GTAC&#xff1a;Google Test Automation Conference&#xff0c;Google测试自动化大会。 本书出版之前还有一本《微软测试之道》&#xff0c;值得阅读。 质量不是被测试出来的&#xff0c;但未经测试也不可能开发出有质量的软件。质量是开发过程的问题&#xff0c;而不…

股指期货的详细玩法功能与应用解析

股指期货作为一种重要的金融衍生工具&#xff0c;为投资者提供了多样化的投资和风险管理手段。本文将详细探讨股指期货的三大主要功能&#xff1a;风险规避、价格发现和资产配置。 第一&#xff0c;风险规避功能 1.套期保值&#xff1a;股指期货的风险规避功能主要通过套期保值…

HarmonyOS 速记

目录 装饰器Entry(入口)Component(组件)State(状态)Prop(属性)Preview(预览)PreviewerInspector 结构体structbuild自定义组件自定义 Custom 组件 容器Row(行) & Column(列)RelativeContainer(相对布局容器)marginpaddingSwiper(轮播图)Grid(网格容器)List(列表) 组件Image…

Java入门程序-HelloWorld

Java程序开发的三个步骤 1.编写代码得到 .java 源代码文件 2.使用javac编译得到 .class 字节码文件 3.使用java运行 注意事项 建议代码文件名全英文&#xff0c;首字母大写&#xff0c;满足驼峰命名法&#xff0c;源代码文件的后缀必须是.java 开发HelloWorld程序 &…

MATLAB十九种作图大全

一、二维曲线图 反应两个变量的因果关系 clear; %清除工作空间的所有变量 clc; %清除命令窗口的内容&#xff0c;对工作环境中的全部变量无任何影响 close all; %关闭所有的Figure窗口 x linspace(1,200,100); %均匀…

进程监控与管理详解

一、进程的定义: 进程process是正在运行的程序,包括: 分配的内存地址空间 安全属性、包括所有权和特权 一个或多个线程 进程状态 进程的环境包括: 本地和全局变量 当前调度上下文…

Mac清理其他文件:释放存储空间的高效指南

每个Mac用户都可能遇到存储空间不足的问题&#xff0c;尤其是当“其他”文件积累到一定体积时。在Mac上&#xff0c;“其他”文件通常包括各种系统文件、缓存、文档以及不被归类为应用程序、照片、电影或音乐的其他类型的文件。这些文件往往不易被注意&#xff0c;但逐渐占用了…

数组学习内容

动态初始化 只给长度&#xff0c;数据类型【】 数组名new 数据类型【数组长度】 内存图

Leetcode—1137. 第 N 个泰波那契数【简单】

2024每日刷题&#xff08;160&#xff09; Leetcode—1137. 第 N 个泰波那契数 记忆化搜索实现代码 class Solution { public:int tribonacci(int n) {int zero 0;int one 1;int two 1;if(n 0) {return zero;}if(n 1) {return one;}if(n 2) {return two;}int ans 0;fo…

vscode搭建ros开发环境问题记录(更新...)

文章目录 vscode 不能自动补全方法一&#xff1a;方法二&#xff1a; 开发环境&#xff1a; vmware 15.7 ubuntu 20.04 ros noetic vscode 不能自动补全 方法一&#xff1a; 这里将头文件已经正确包含到c_cpp_properties.json中代码中仍然不能自动补全&#xff0c; 将C_CPP插…

基于python+django+vue的农业管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的农…