Vue2升级Vue3 --- gogocode工具使用体验_洛千陨的博客-程序员秘密

技术标签: 前端  Vue2升级Vue3  vue.js  javascript  

1.简介及使用

  1. 简介:阿里妈妈开发的一个vue2代码转vue3代码的工具
  2. 项目地址: https://github.com/thx/gogocode
  3. 使用文档:https://gogocode.io/zh/docs/vue/vue2-to-vue3
  4. 项目版本:v1.0.45
  5. 使用流程:
npm install gogocode-cli -g  // 安装工具

gogocode -s ./src -t gogocode-plugin-vue -o ./src-out  // 升级代码

gogocode -s package.json -t gogocode-plugin-vue -o package.json  // 升级配置文件

npm install  // 安装升级

1.可能存在转化停顿情况,需要排查转换卡住的文件并暂时删除从而转化成功;
2.代码转换将根据gogocode内置的风格进行转换,可能改变原有代码的代码风格
3.同时因为gogocode仍处于迭代过程中,不同版本会造成升级的效果有差异

2.主要语法转换

语法转换 优点 缺陷
v-model 父组件绑定:
v-model => v-model:value
子组件触发:
input => update:value
-
生命周期 beforeDestroy => beforeUnmount
destroyed => unmounted
-
\$listener v-bind="\$listener" => v-bind="\$attrs" -
事件API 生成代理文件代理事件API并引入
Bus.\$emit('') => \$emit(Bus,'')
子组件触发事件错误转换
this.\$emit('') => \$emit(this,'')
emit选项 子组件触发事件写入选项中 事件API事件也写入选项中
异步组件 () => import('') 转化
Vue.defineAsyncComponent(() => import(''))
仍需手动引入defineAsyncComponent
并去掉Vue
slot插槽 slot="name" => v-slot:name slot-scope未转换

3.其他配置转换

  • 启动文件index.js: 结合gogocode以及手动修改
// 创建Vue实例移动到头部
window.$vueApp = Vue.createApp(App)
window.$vueApp.use(router) // router在挂载之前,否则无法渲染
window.$vueApp.mount('#app')
window.$vueApp.use(store)

// 兼容就this.$http调用方法
// Vue2语法转化:Vue.use(v => { v.prototype.$http = axios })
window.$vueApp.config.globalProperties.$http = axios


window.$vueApp.use(less)
window.$vueApp.use(Antd)
window.$vueApp.use(Contextmenu)
window.$vueApp.component('draggable', draggable)

window.moment = moment
  • router:结合gogocode以及手动修改
// 404页面路径调整
path: '*' => path: '/:catchAll(.*)'
// 与 2.x 不同,loader 函数不再接收 resolve 和 reject 参数
component: (resolve) => {
    require.ensure([], () => {
        return resolve(require('@views/login/Index.vue'))
    }, 'login')
}
=> 
component: () => import('@views/login/Index.vue'),

总结:
1.使用该工具能够减少一定的升级工作量,但是同时会产生其他一些未知的隐患,使用过程中需要对转换后的代码进行排查。目前针对大型项目还是优先手动升级
2.若不采用该工具进行一键转换,该工具有单独可取之处,比如:自动生成的事件API代理文件以及package.json变更等(该文件执行命令转换后仍有问题,将在vue3变更中进一步说明)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44242707/article/details/122742884

智能推荐

vim 小技巧几则_周小树的博客-程序员秘密

1.  头文件和源文件到跳转: gf如果.h 和.cpp在同一目录下,直接在头文件上使用gf快捷键,如果不在,在.vimrc在中设置set path+=headPathheadPath为头文件目录2. 局部变量跳转: gd3. ctags生成数据库:参看 omnicppcomplete 提供的ctags生成语句:ctags -R --c+

centos6.5将python2.6.6升级到python2.7以及easy_install和pip_dengkaikaikai的博客-程序员秘密

今天在安装celery billboard版本 的时候,竟然报了这样的错误: “Versions of Python before 2.7 are not supported” 意思是python2.7之前的版本是都不支持的,因此我果断决定将python升级到python2.7。 升级的过程中还是遇到了一些问题,后来参考了这篇博文顺利地实现了升级: Centos 6.x 升级python到

arcpy投影(一)——prj、gtf文件定义、路径及解析(arcmap,arcpro)_prj文件__Oak_Tree_的博客-程序员秘密

对ArcMap 及Arcpro中的prj投影文件和gtf投影变换关系文件进行了路径说明和内容解析

cview类 public_MFC学习笔记_侯戈的博客-程序员秘密

1 概述本文档是在学习<>MFC过程中临时写的一篇文档,并没有真正的深入。本文档结合VC9单文档程序来写的。2 MFC六大技术对应<>的第三章。2.1 MFC程序的初始化过程2.1.1 _tWinMain_tWinMain(…){returnAfxWinMain(…);}从代码可以看到,该函数仅调用了AfxMain函数。_tWinMain是被C/C++运行期函数调用的,这里...

随便推点

dispatchTouchEvent()返回值问题_dispatchtouchevent返回true_dreaminger156的博客-程序员秘密

    根据网上的Blog的解释:    当dispatchTouch()返回true,move、up手势能够被执行,当返回false时,只执行一次down事件。    而根据源码:    if (mFirstTouchTarget == null) { // No touch targets so treat this as an ordinary view. ...

网络共享计算机设置方法,如何设置网络共享(局域网共享如何设置)_打假男孩的博客-程序员秘密

局域网(Local Area Network)是在一个局部的地理范围内(如一个学校、工厂和机关内),将各种计算机。外部设备和数据库等互相联接起来组成的计算机通信网,简称LAN。局域网共享如何设置呢?局域网共享设置步骤如下:1.更改不同的计算机名,设置相同的工作组!2.我的电脑右键-管理-计算机管理-本地用户和组-用户:更改管理员用户名3.手动设置IP,将ip设置在同一个网段,子网掩码和DNS解析相...

公众号内容拓展学习笔记(2022.2.25)_yolov5 af-fpn_CV_七少的博客-程序员秘密

公众号内容拓展学习笔记(2022.1.20) 今日要点谷歌MaskGIT|双向Transformer,图像生成新范式! ️️Abstract: 谷歌MaskGIT|双向Transformer,图像生成新范式Paper: MaskGIT: Masked Generative Image TransformerTips: MaskGIT的核心思想,就是参考人的作画逻辑,先生成一部分token,再逐渐去完善。基于深度学习的多目标跟踪(MOT)技术一览

SpringBoot整合Mybatis-Plus(包含逆向自动生成代码)_Keson Z的博客-程序员秘密

文章目录一。简介二。数据库准备三。项目搭建四。项目运行五。总结一。简介MyBatis-Plus(opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Serv

uGUI3.0 VC6.0的移植_ugui移植_月影恋人的博客-程序员秘密

uGUI3.0 VC6.0的移植1 .移植的准备 1).到[http://embeddedlightning.com/ugui/]下载uGUI3.0。 2).安装一个VC6.0 3).EasyX图形工具,下载地址链接:[https://pan.baidu.com/s/1A-i3w0tKeR8iSpnb9wxWEg] 提取码:zwam 复制这段内容后打开百度网盘手机App,操作更方便哦...

JavaWeb学习Day01_JiangHe1997的博客-程序员秘密

ServletServlet是sun公司开发的动态web的一门技术sun在这些API中提供了一个接口叫做 Sevlet 如果你想开发一个Servlet程序,只需要完成两个小步骤:编写一个类,实现servlet接口把开发好的java类部署到web服务器中 把实现了Servlet接口的java程序叫做ServletHelloServlet...