Vue3替代vue2就好比自动驾驶代替出租网约车

萝卜快跑不是一时的横空出世,其实在北京包括在武汉已经有几个年头,这次敢拉出来大规模应用,也是技术突破和不断尝试革新的实践,先不说损坏了多少人的利益,对于Ai而言是一次历史的里程碑,从这个角度是可歌的,😄言归正传,今日分享vue2升级到vue3一些步骤。

首先要了解,Vue 3 中需要关注的一些新特性包括:

准备工作

安装

  1. 尽可能升级工具。

    • 如果使用了自定义的 webpack 设置:将 vue-loader 升级至 ^16.0.0
    • 如果使用了 vue-cli:通过 vue upgrade 升级到最新的 @vue/cli-service
    • (替代方案) 迁移至 Vite + vite-plugin-vue2。[示例提交]
  2. 在 package.json 里,将 vue 更新到 3.1,安装相同版本的 @vue/compat。且如果存在 vue-template-compiler 的话,将其替换为 @vue/compiler-sfc

    diff
    "dependencies": {
    -  "vue": "^2.6.12",
    +  "vue": "^3.1.0",
    +  "@vue/compat": "^3.1.0"
       ...
    },
    "devDependencies": {
    -  "vue-template-compiler": "^2.6.12"
    +  "@vue/compiler-sfc": "^3.1.0"
    }

    示例提交

  3. 在构建设置中,为 vue 设置别名 @vue/compat,且通过 Vue 编译器选项开启兼容模式。

    示例配置

    vue-cli
     普通 webpack 
     Vite 
     
  4. 如果使用了 TypeScript,你还需要修改 vue 的类型,通过添加一个 *.d.ts 暴露其 (在 Vue 3 中已经不再展示) 默认导出。

    ts
    declare module 'vue' {
      import { CompatVue } from '@vue/runtime-dom'
      const Vue: CompatVue
      export default Vue
      export * from '@vue/runtime-dom'
      const { configureCompat } = Vue
      export { configureCompat }
    }
  5. 在此,你的应用可能会遇到一些编译时的错误/警告 (例如对过滤器的使用),请先修复这些错误。直至所有的编译警告都消失,当然,你也可以把编译器设置为 Vue 3 模式。

    示例提交

  6. 在修复了这些错误之后,如果没有受制于上述的限制,那么应用就应该可以运行了。

    你可能会同时从命令行和浏览器控制台看到很多警告。这里提供一些一般化的小建议:

    • 你可以在浏览器控制台里过滤特定的警告。建议通过使用过滤器,使自己每次专注修复同一种问题。你也可以使用类似 -GLOBAL_MOUNT 的否定式过滤器。

    • 你可以通过兼容性配置关闭对特定的废弃内容的处理。

    • 有些警告可能来自你使用的依赖 (如 vue-router)。你可以通过警告的组件嵌套或调用栈的追踪信息 (可以点击展开) 来进行检查。可以优先专注于修复源自你自己代码的警告。

    • 如果你使用了 vue-router,请注意在升级至 vue-router v4 之前,<transition> 和 <keep-alive> 无法和 <router-view> 一起工作。

  7. 升级 <transition> 类名。这是唯一没有运行时警告的特性。你可以在整个项目范围内做一次 .*-enter 和 .*-leave CSS 类名的搜索。

    示例提交

  8. 更新应用的入口以使用新的全局挂载 API

    示例提交

  9. 将 vuex 升级至 v4

    示例提交

  10. 将 vue-router 升级至 v4。如果你还使用了 vuex-router-sync,可以同时将其替换为一个 store getter。

    升级过后,同 <router-view> 一起使用 <transition> 和 <keep-alive> 就要求使用新的基于作用域插槽的语法

    示例提交

  11. 逐个修复警告。注意有些特性在 Vue 2 和 Vue 3 之间存在行为冲突——例如渲染函数 API,或函数式组件 vs. 异步组件的改变。为了迁移到 Vue 3 API 而不影响到应用的其它部分,你可以通过 compatConfig 选项对单个组件选择性启用 Vue 3 的行为。

    示例提交

  12. 当修复了所有警告以后,你就可以移除迁移构建版本并切换为 Vue 3。注意如果存在基于 Vue 2 行为的依赖,你可能无法做到这一点。

    示例提交

兼容性配置

全局配置

兼容性特性可以进行单独禁用:

js

import { configureCompat } from 'vue'

// 禁用某些兼容性特性
configureCompat({
  FEATURE_ID_A: false,
  FEATURE_ID_B: false
})

或者整个应用默认为 Vue 3 的行为,仅开启某些兼容性特性:

js

import { configureCompat } from 'vue'

// 所有 Vue 3 的默认行为,并开启某些兼容性特性
configureCompat({
  MODE: 3,
  FEATURE_ID_A: true,
  FEATURE_ID_B: true
})

基于单个组件的配置

一个组件可以使用 compatConfig 选项,并支持与全局 configureCompat 方法相同的选项:

js

export default {
  compatConfig: {
    MODE: 3, // 只为这个组件选择性启用 Vue 3 行为
    FEATURE_ID_A: true // 也可以在组件级别开启某些特性
  }
  // ...
}

针对编译器的配置

以 COMPILER_ 开头的特性是针对编译器的:如果你正在使用完整构建版本 (含浏览器内编译器),它们可以在运行时中被配置。然而如果使用构建设置,它们必须换为通过在构建配置中的 compilerOptions 进行配置 (参阅上述的配置)。

非兼容性改变

全局API

模板指令

在 Vue 3.x 中,key 则应该被设置在 <template> 标签上。

html

<!-- Vue 3.x -->
<template v-for="item in list" :key="item.id">
  <div>...</div>
  <span>...</span>
</template>

vue3.x 版本中 v-if 总是优先于 v-for 生效。

后者属性覆盖前者

<!-- 模板 -->
<div id="red" v-bind="{ id: 'blue' }"></div>
<!-- 结果 -->
<div id="blue"></div>

<!-- 模板 -->
<div v-bind="{ id: 'blue' }" id="red"></div>
<!-- 结果 -->
<div id="red"></div>

组件

渲染函数

自定义元素

其他小改变

被移除的 API

  • 20
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weifont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值