技术
·
4 min read
·
- Views
Vue2+webpack项目迁移到Vue3+Vite
Copied
技术
·
4 min read
·
- Views
Vue2+webpack项目迁移到Vue3+Vite
Copied
刚开始做海外项目时,有点受不了写vue2+js,加上本就需要对每个页面都进行需求的修改。所以正好趁此机会直接把项目迁移到了vue3+ts。 不过时间已经过去挺久了,本文主要是以回忆为主。
当时是直接当一个新项目来做,所以直接用 vite 脚手架创建了一个新项目 npm init vite@latest my-vue-app -- --template vue-ts
然后先把旧项目的main.js文件copy过来,原本的Vue.xxx 修改为app.xxx
旧项目由很多全局方法、属性的挂载。这种用法在vue3中是不推荐的,vue3更推荐直接import导入来使用(当然也可以通过getCurrentInstance()来获取到this从而使用),也可以通过app.config.globalProperties[xxx]=xxx来配置
将router文件copy过来
更改router的创建方法,旧版vue-router是使用new Router() 创建路由, 新版需要改为createRouter
因为使用了TS 我们还需要补充一下类型,以便在业务代码中使用route.meta时能有代码提示
store基本没有太大更改,正常来说上了vue3对于状态管理用pinia更方便, 但是考虑项目基本没怎么使用store ,基本不存在多层级的store,所以就不升级了,直接改写一下初始化方法即可
旧版是使用new Store() 新版改为createStore()
本次升级其实是渐进式的,因为vue3是兼容vue2的option API的,因此对于script的代码其实可以不用改动。但是既然使用vue3,不用compositionAPI怎么行呢。所以后来基本我做每个页面都会将其转换为compositionAPI的写法,所以对于全局方法直接引入即可。例如一些this.$Message 直接替换为Message,并从view-ui-plus中导入即可
主要是插槽语法变了 不能使用slot=”xxx” scope-slot=”{scope}” 而是改为 v-slot:xxx=”{scope}”或者#xxx=”{scope}”
这是由于vite 导致的,vite使用esm规范,而require是cjs的规范语法,如果不通过社区插件,官方推荐是使用import.meta.glob 来引入资源文件。如果是原本是require第三方包的话直接修改为import即可
基本在项目中使用require都是引入一些assets目录下的资源,因此可以在utils中直接封装一个方法
vue3删除了$listner 并将其与 $attrs进行了合并, 因此直接全局替换掉即可
viewui升级到view-ui-plus 需要修改的点并不多,基本上viewui存在的问题,view-ui-plus也存在。
能回忆起来的就是Page组件进行修改。
在旧项目中使用只能使用:current来绑定当前页码,然后监听on-change和on-page-size-change两个回调。 但是在view-ui-plus中是使用v-model直接双向绑定当前页码。
当时copy过来没有修改,导致当我在代码中手动设置current值时,虽然回调都会执行,但是页面上的当前页码并不会更新,我还写了useRefresh Hook来解决这个问题,没想到在后来看其源码发现能绑定一个modelValue,一看文档才发现更新了。
34 篇文章
53 个话题
- 次访问