大约一年前,我们终于从 Vue 2 迁移到 Vue 3。距其正式生命周期还有 6 个月。当时,我们的应用程序有大约 100 个页面和 300 个组件,并使用了一些与 Vue 相关的经典依赖项:Vue-router、Pinia(和 Pinia ORM)、Vue-i18n、TipTap、ElementUI(ElementPlus for Vue 3)
以下是一些对我们有帮助的建议。由于 Vue 2 仍然运行得很好,所以你最好花点时间来简化迁移,而不是仓促完成,破坏你的应用程序并摧毁你的道德!
1️⃣ 开始之前
警告其他人
事情肯定会破裂,哪怕是一点点。你最好确保其他团队没问题。
升级到最新的Vue 2.7
显然,由于大多数新功能都在 Vue 2.7 中提供,并且是向后兼容的,如果您还没有,那么赶上是很重要的。迁移到 Vue 3 时,您仍然可以享受它的功能。迁移的步骤也会更小。
花点时间
这可能是一项相当大的工作,因此您最好预计在很长一段时间内降低风险。而且,它帮助我们(开发者)保持道德!计划几周甚至几个月,因为你知道什么时候开始,但你不知道什么时候完成......最后,最好每周花一些时间,这样任何中断都不会造成灾难性的。
创建团队
如果可能的话,不要只依赖一个开发人员,因为这是一项令人筋疲力尽的任务。此外,您需要快速反馈和合并循环,因为很多更改会影响整个代码库,并且可能每天都会产生冲突。不用处理这个就已经够难的了!
测试驱动的迁移
一半的时间将用于测试整个应用程序,因此您最好尽可能将其自动化。根据我们的经验:
- 单元测试不是很有用,因为它们通常测试与 Vue 没有真正关联的东西(例如仅“纯 JS”函数),所以我们没有关注它们
- 使用 vue-test-utils 进行组件测试迁移起来很痛苦,最后我们甚至不得不禁用其中一些
- 端到端测试是最有价值的,因为它不依赖于任何 JS 或 Vue 内部,并且一旦应用程序中出现错误就会失败
总之,最好的方法是创建所谓的“冒烟测试”,您只需在应用程序中使用您能想到的最基本的场景进行导航即可。让它们保持简单,这样它们就会很快,因为你越早让它们运行,它们就会越有用。如果它们在合并之前运行(例如在 CI 中),则会获得奖励点。
输入所有内容
TypeScript 有一点帮助,但 Vue 2 对它的支持仍然很差。使用 TypeScript 仍然是一个好主意,但可能没有太大帮助;一旦使用 Vue 3,设置语法将是你最好的朋友!
清理一切
这是显而易见的,但是代码中会发生很多变化,也会出现很多错误。一个简单的 ESLint / Prettier 可以节省大量时间。如果您已经有了它们,您可以在迁移的同时检查 Vue 3 的新规则:https://eslint.vuejs.org/rules/
使用Vite
在开始迁移 Vue 之前,我们已经从 Webpack 迁移到了 Vite,所以我不确定它有多大帮助,但由于它是今天的明确标准,一些插件甚至可能不会给出使用 Webpack 升级的说明。我想先这样做比较安全,因为 Vite 支持 Vue 2,但相反 Vue 3 生态系统可能不支持 Webpack。
2️⃣先小步走
目标是在实际升级 Vue 本身时尽可能减少更改。
升级依赖
查看您使用的每个 Vue 相关依赖项,检查是否有同时支持 Vue 2 和 Vue 3 的版本,然后升级到它。 Vue-demi 帮助很多插件维护者实现了它,所以它很有可能可用。
例如,您可能想从 Vuex 迁移到 Pinia,它支持这两个版本(Vuex 仍然需要小规模迁移)并且无论如何都是新标准。
替换依赖项
对于其他依赖项,您可能需要检查是否有任何现代替代方案可以满足您的需求。例如,我们用 vue-use 替换了 vue-mq。
需要时使用猴子补丁
我们必须务实,因此由于某些迁移比其他迁移更困难,我们最终创建了一个小的抽象层来修复它。例如,我们在 vue-i18n v9 上遇到了困难,它带来了一些(有时没有记录的)重大更改。因此,我们最终创建了一个帮助程序,它公开了 $t 的自定义版本,以防止必须重写每个组件(因为这个最常用的函数现在基本上没有理由不接受“nullish”值)。换句话说,不要太完美主义!
3️⃣ 开始迁移
现在艰苦的工作开始了。我们之前所做的一切都会减轻痛苦。这里没有魔法,这可能是迁移中最困难的部分。
改变一切,但什么也改变不了
按照说明使用“迁移构建”(也称为兼容模式)将 Vue 2 替换为 Vue 3。
关闭所有可用的标志,以便应用程序的运行几乎与版本 2 一样。
检查是否没有重大更改影响您的应用,或修复它们。
小步骤
逐步启用每个标志并彻底测试应用程序。如果某些组件太难迁移,请记住您可以覆盖其兼容性选项;因此,您最好合并所有内容,但保留一些组件以便稍后迁移,而不是等待整个应用程序立即运行。不要试图立即修复所有问题,要等几天才能发现任何错误(并为您的心理健康充电)。
大步
一些依赖项不提供快捷方式。在我们的例子中,将 UI 库从 ElementUI (Vue 2) 迁移到 ElementPlus (Vue 3) 很困难,而且无法分成更小的步骤。我听说 Vuetify 更难。为此,你必须坚强、耐心,并花时间一次性完成这一切。也许在你的团队日历中留出整整一周的时间!
请记住,您仍然可以覆盖在运行时导入的每个组件的兼容性行为:
import { ElButton } from 'element-plus' ElButton.compatConfig = { FEATURE_ID_A: true // features can also be toggled at component level }
最后一步
打开每个标志后,就可以删除迁移构建了。希望您现在不会发现新的意外问题!
别忘了庆祝,你应得的! ?
以上是我们如何从 Vue 迁移到 Vue 3的详细内容。更多信息请关注PHP中文网其他相关文章!

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安装,因为它已内置于现代浏览器中。你只需文本编辑器和浏览器即可开始使用。1)在浏览器环境中,通过标签嵌入HTML文件中运行。2)在Node.js环境中,下载并安装Node.js后,通过命令行运行JavaScript文件。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver Mac版
视觉化网页开发工具

SublimeText3 Linux新版
SublimeText3 Linux最新版