【Vue】Vue2的最后一舞

Vue 2.7 是 Vue 2.x 的最后一个次级版本。在此发布之后,Vue 2 将会进入长期技术支持 (LTS:long-term support) 状态,该状态从现在起计算会持续 18 个月,且不再提供新特性。

根据Vue官网的说法,随着Vue 2.7的发布,Vue 2也将在今年的12月31日停止支持,这一举动更是为了督促更多的开发者转向使用Vue 3。

Vue 3在底层进行了重构,引入了一些性能优化,例如更快的渲染和更小的包大小,使其在性能上比Vue 2更优秀。但是Vue 2是一个经过时间验证的稳定版本,并且有庞大的社区,可以提供了大量的插件、工具和解决方案。所以我们来看看这次的Vue 2的最后一次更新Vue 2.7有哪些变化吧。

从Vue3移植的特性

  • 组合式 API
  • 单文件组件内的 <script setup>
  • 单文件组件内的 CSS v-bind

此外Vue 2.7还支持了以下 API:

  • defineComponent() 以改善类型推断 (较之于 Vue.extend)
  • h()useSlot()useAttrs()useCssModules()
  • set()del()nextTick() 也在 ESM 构建版本中被导出为具名 API。
  • 支持 emits 选项,但仅以类型检查为目的 (并不会影响运行时的行为)

2.7 也在模板表达式中支持了 ESNext 语法。当配合构建系统使用时,编译后的模板渲染函数将会经过和处理普通 JavaScript 相同配置的 loader / 插件。这意味着如果你为 .js 文件配置了 Babel,这些配置也会应用在单文件组件的模板表达式中。

被导出的 API 注意事项

  • 在 ESM 构建版本中,这些 API 会 (且仅会) 被导出为具名 API:
import Vue, { ref } from "vue";Vue.ref; // undefined,请换为使用具名导出的 API
  • 在 UMD 和 CJS 构建版本里,这些 API 会被导出为全局对象 Vue 的属性。
  • 当调用外置的 CJS 版本进行打包时,打包工具应该有能力处理与 ESM 模块的互操作 (ESM interop)。

与 Vue 3 的行为差异

组合式 API 使用了 Vue 2 中基于 getter/setter 的响应式系统,以确保浏览器的兼容性。这意味着其行为和 Vue 3 中基于代理的系统相比有一些重要的区别:

  • 所有 Vue 2 检测变化的注意事项依然存在。
  • reactive()ref()shallowReactive() 会直接转换原始的对象而不是创建代理。这意味着:
// 2.7 中为 true,3.x 中为 false
reactive(foo) === foo;
  • readonly() 创建一个独立的对象,但是其不会追踪新添加的属性,也不会对数组生效。
  • 避免将数组作为 reactive() 的根值。因为无法访问属性,数组的变更不会被追踪到 (这样做会产生一则警告)。
  • 响应式 API 会忽略以 symbol 作为 key 的属性。

此外,Vue 2.7并没有移植回以下特性:

  • createApp() (Vue 2 不支持相互隔离的应用 scope)
  • <script setup> 中的顶层 await (Vue 2 不支持异步组件初始化)
  • ❌ 模板表达式中的 TypeScript 语法 (与 Vue 2 parser 不兼容)
  • ❌ 响应性语法糖 (仍处于试验阶段)
  • ❌ 选项式组件不支持 expose (但是在 <script setup> 中支持 defineExpose())。

升级指南

Vue CLI / webpack

  1. 将本地的 @vue/cli-xxx 依赖升级至所在主版本范围内的最新版本 (如有):

    v4 升级至 ~4.5.18
    v5 升级至 ~5.0.6

  2. 将 vue 升级至 ^2.7.0。同时你可以从依赖中移除 vue-template-compiler——它在 2.7 中已经不再需要了。

    注意:如果你在使用 @vue/test-utils,那么 vue-template-compiler
    需要保留,因为该测试工具集依赖了一些只有这个包会暴露的 API。

  3. 检查包管理工具的版本锁定文件,以确保以下依赖的版本符合要求。它们可能是间接依赖所以未必罗列在了 package.json 中。

    vue-loader: ^15.10.0
    vue-demi: ^0.13.1

    否则,你需要移除整个 node_modules
    和版本锁定文件,然后重新安装,以确保它们都升到了最新版本。

  4. 如果你曾经使用了 @vue/composition-api,将其导入语句切换至 vue 即可。注意有些之前通过插件暴露的 API,例如 createApp,并没有被移植回 2.7。

  5. 如果你在 <script setup> 中遇到了未使用变量的 lint 错误,请更新 eslint-plugin-vue 至最新版本(9+)。

  6. Vue 2.7 的单文件组件编译器使用了 PostCSS 8 (从 7 升级而来)。PostCSS 8 应该向下兼容了绝大多数插件,但是该升级可能在你使用了一些只支持 PostCSS 7的自定义插件时遇到问题。这种情况下,你需要升级相应的插件至其兼容 PostCSS 8 的版本。

Vite

2.7 通过一个新的插件提供对 Vite 的支持:@vitejs/plugin-vue2。这个新的插件需要 Vue 2.7 或更高版本,并取代了已有的 vite-plugin-vue2

注意这个新插件刻意不会处理 Vue 特有的 JSX / TSX 转换。在 Vite 中,Vue 2 的 JSX / TSX 转换是通过一个独立的插件进行处理的:@vitejs/plugin-vue2-jsx

Volar 兼容性

2.7 的发布改进了类型定义,所以我们不必再只为支持 Volar 的模板类型推断而安装 @vue/runtime-dom。你现在只需要在 tsconfig.json 中进行以下配置:

{// ..."vueCompilerOptions": {"target": 2.7}
}

后续

至于要不要升级Vue 3还是继续使用Vue 2,这个需要看自己和项目的需求,官方也给出了几个选择和说明,可以查看 Vue 2 LTS 及其延长版服务

引用文献:Vue官方文档

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

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

相关文章

《LeetCode力扣练习》代码随想录——栈与队列(逆波兰表达式求值---Java)

《LeetCode力扣练习》代码随想录——栈与队列&#xff08;逆波兰表达式求值—Java&#xff09; 刷题思路来源于 代码随想录 150. 逆波兰表达式求值 栈 class Solution {public int evalRPN(String[] tokens) {// Stack<Integer> stacknew Stack<>();Deque<Integ…

Vue - 事件处理详解

组件代码 下面是一个基本的 Vue.js 组件代码&#xff0c;其中包含了不同类型的事件处理器&#xff1a; <template><div><!-- 内联事件处理器&#xff1a;点击按钮时调用 increaseCount 方法 --><button click"increaseCount">加 1</but…

南大通用数据库 GBase 8a 性能调优方法--Hash索引

南大通用数据库--GBase 8a中建立Hash Index 通常可以用来解决等值查询的定位效率&#xff0c;特别是对以单表精确查询为主的应用场景尤为适合&#xff0c;如电信业务中的并发话单查询等&#xff08;特别是内存基本充足的场景&#xff09;。 默认创建GLOBAL的哈希索引。创建全局…

组合[中等]

一、题目 给定两个整数n和k&#xff0c;返回范围[1, n]中所有可能的k个数的组合。你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2&#xff1a; 输入&#xff1a;n 1…

《对话品牌》——魅力女人:成就幸福人生

本期节目《对话品牌》栏目组邀请到了北京紫琪尔健康管理集团董事长紫琪尔孙红宇女士参加栏目录制&#xff0c;分享其企业故事&#xff0c;树立品牌形象&#xff0c;提升品牌价值&#xff01; 节目嘉宾&#xff1a;紫琪尔集团董事长孙红宇 节目主持人&#xff1a;吴昊 节目播…

前端 -- 基础 常用标签 ( 图像标签及其属性详解)

目录 图像标签 &#xff1a; 插入图像 图像标签的其它属性 &#xff1a; alt 属性 title 属性 width 属性 height 属性 border 属性 注意 图像标签 &#xff1a; 在我们的网页中&#xff0c;可以看到 好多 好多 图片&#xff0c;那这些图片又是怎样 在…

Android画布Canvas drawPath绘制跟随手指移动的圆,Kotlin

Android画布Canvas drawPath绘制跟随手指移动的圆&#xff0c;Kotlin import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Path import android.os.Bundle import android.…

数据库中修改表的语句

1.修改表名&#xff1a;ALTER TABLE 旧表名 RENAME AS 新表名 例&#xff1a;ALTER TABLE teacher RENAME AS teacher1 2.增加表的字段&#xff1a;ALTER TABLE 表名 ADD 字段名 列属性 例&#xff1a;ALTER TABLE teacher1 ADD age INT(11) …

Java 类加载与字节码技术

3 类加载与字节码技术 3.1 类文件结构 类文件结构字节码指令编译期处理类加载阶段类加载器运行期优化 根据 JVM 规范&#xff0c;类文件结构如下 ClassFile {u4 magic;u2 minor_version; // 小版本号u2 major_version; // 主版本号u2 constant_pool_count; // 常量池cp_info…

算法时间空间复杂度计算—空间复杂度

算法时间空间复杂度计算—空间复杂度 空间复杂度定义影响空间复杂度的因素算法在运行过程中临时占用的存储空间讲解 计算方法例子1、空间算法的常数阶2、空间算法的线性阶&#xff08;递归算法&#xff09;3、二分查找分析方法一&#xff08;迭代法&#xff09;方法二&#xff…

WEB 3D技术 three.js 色彩空间讲解

上文 WEB 3D技术 three.js 设置环境贴图 高光贴图 场景设置 光照贴图 我们讲了基础材质的各种纹理 但是 我们的图片 到了界面场景中 好像绿的程度有点不太一样了 这里的话 涉及到我们的色彩空间 他有两种 一种是线性的 一种是 sRGB类型的 线性呢 就是根据光照强度 去均匀分…

【满分】【华为OD机试真题2023CD卷 JAVAJS】API集群负载统计

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 API集群负载统计 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 某个产品的RESTful API集合部署在服务器集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务…

拓扑排序图解-Kahn算法和深度优先搜索

拓扑排序 是将一个有向无环图中的每个节点按照依赖关系进行排序。比如图 G G G存在边 < u , v > <u,v> <u,v> 代表 v v v的依赖 u u u, 那么在拓扑排序中&#xff0c;节点 u u u一定在 v v v的前面。 从另一个角度看&#xff0c;拓扑排序是一种图遍历&#…

KMP算法的理解+板子

对kmp算法的理解中&#xff0c;很重要的一点就是next数组。 很多人不理解next数组的含义&#xff0c;是因为它同时具有两个意思&#xff0c;而且这两个意思在不同的环境下不同。 现在给你两个字符串&#xff1a; 一个是文本串 text 一个是模板串 pattern 然后定义两个指针…

《别让猴子跳回背上》——管理者的时间管理

讲时间管理的书很多&#xff0c;但这本是专门讲给管理者的时间管理。 在职场中&#xff0c;许多管理者都会碰到工作计划执行不下去、组织目标难于实现的问题&#xff0c;搭进了自己所有可以支配的时间&#xff0c;仍旧是焦头烂额&#xff0c;顾此失彼&#xff1b;而下属则因为…

力扣题目学习笔记(OC + Swift)19. 删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 此题目为链表题&#xff0c;拿出我们的杀手锏&#xff0c;链表解题经典三把斧&#xff1a; 哑巴节点栈快慢指针 关于内存问题&#xff1a;由于Swift及…

算法基础day1

归并排序模版 #include <iostream> using namespace std; int n; const int N 1e610; int q[N],tmp[N]; void merge_sort(int l,int r,int q[]){if(l>r) return;int mid lr>>1;merge_sort(l,mid,q);merge_sort(mid1,r,q);//归并的的过程int k0,il,jmid1;while(…

【Vue2+3入门到实战】(10)Vue基础之一文掌握 组件通信 详细示例(组件通信语法、父传子 、 子传父、非父子通信)

这里写自定义目录标题 一、学习目标1.组件通信2.综合案例&#xff1a;小黑记事本&#xff08;组件版&#xff09; 二、组件通信1.什么是组件通信&#xff1f;2.组件之间如何通信3.组件关系分类4.通信解决方案5.父子通信流程6.父向子通信代码示例7.子向父通信代码示例8.总结 三、…

代码随想录 122. 买卖股票的最佳时机 II

题目 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大 利润 。 示例 …

FME之读取文件名路径FilenamePartExtractor转换器

在读取文件所在路径及相关信息时&#xff0c;我们除了在读模块时选择Directory and File Pathnames数据类型。还可以选择在某个阶段使用FilenamePartExtractor转换器来读取文件所在路径及相关信息。 在前面转换器只要暴露有fme_dataset&#xff0c;在源文件名选择它即可实现。…