指南
基础
- 安装
- 介绍
- Vue 实例
- 模板语法
- 计算属性和侦听器
- 类和样式绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
组件深入
- 组件注册
- Props
- 自定义事件
- 插槽
- 动态和异步组件
- 处理边缘情况
过渡和动画
- 进入/离开和列表过渡
- 状态过渡
可重用性和组合
- 混入
- 自定义指令
- 渲染函数和 JSX
- 插件
- 过滤器
工具
- 单文件组件
- 测试
- TypeScript 支持
- 生产部署
扩展
- 路由
- 状态管理
- 服务器端渲染
- 安全
内部机制
- 深入响应性
迁移
- 从 Vue 1.x 迁移
- 从 Vue Router 0.7.x 迁移
- 从 Vuex 0.6.x 迁移到 1.0
- 迁移到 Vue 2.7
元数据
- 与其他框架比较
- 加入 Vue.js 社区!
- 认识团队
迁移到 Vue 2.7
Vue 2.7 是 Vue 2 的最新次要版本。它提供了对 组合 API 的内置支持。
尽管 Vue 3 现在是默认版本,但我们理解仍然有很多用户由于依赖兼容性、浏览器支持要求或仅仅是升级带宽不足而不得不停留在 Vue 2 上。在 Vue 2.7 中,我们从 Vue 3 中移植了一些最重要的功能,以便 Vue 2 用户也能从中受益。
移植的功能
- 组合 API
- SFC
<script setup>
- SFC CSS v-bind
此外,还支持以下 API
defineComponent()
具有改进的类型推断(与Vue.extend
相比)h()
,useSlot()
,useAttrs()
,useCssModules()
set()
,del()
和nextTick()
也作为 ESM 构建中的命名导出提供。emits
选项也受支持,但仅用于类型检查目的(不影响运行时行为)2.7 还支持在模板表达式中使用 ESNext 语法。当使用构建系统时,编译后的模板渲染函数将通过为普通 JavaScript 配置的相同加载器/插件。这意味着如果你为
.js
文件配置了 Babel,它也将应用于 SFC 模板中的表达式。
关于 API 暴露的说明
在 ESM 构建中,这些 API 作为命名导出提供(并且仅作为命名导出提供)
import Vue, { ref } from "vue";
Vue.ref; // undefined, use named export instead在 UMD 和 CJS 构建中,这些 API 作为全局
Vue
对象上的属性暴露。当使用 CJS 构建外部化进行捆绑时,捆绑器应该能够在外部化 CJS 构建时处理 ESM 互操作性。
与 Vue 3 的行为差异
组合 API 使用 Vue 2 的基于 getter/setter 的响应式系统进行移植,以确保浏览器兼容性。这意味着与 Vue 3 的基于代理的系统相比,存在一些重要的行为差异
所有 Vue 2 更改检测注意事项 仍然适用。
reactive()
,ref()
和shallowReactive()
将直接转换原始对象,而不是创建代理。这意味着// true in 2.7, false in 3.x
reactive(foo) === foo;readonly()
确实 创建了一个单独的对象,但它不会跟踪新添加的属性,并且不适用于数组。避免在
reactive()
中使用数组作为根值,因为没有属性访问,数组的变异将不会被跟踪(这将导致警告)。响应式 API 忽略具有符号键的属性。
此外,以下功能明确地没有被移植
- ❌
createApp()
(Vue 2 没有隔离的应用程序范围) - ❌
<script setup>
中的顶层await
(Vue 2 不支持异步组件初始化) - ❌ 模板表达式中的 TypeScript 语法(与 Vue 2 解析器不兼容)
- ❌ 响应式转换(仍在实验阶段)
- ❌
expose
选项不支持选项组件(但defineExpose()
在<script setup>
中受支持)。
升级指南
Vue CLI / webpack
将本地
@vue/cli-xxx
依赖项升级到你的主要版本范围内的最新版本(如果适用)~4.5.18
for v4~5.0.6
for v5
将
vue
升级到^2.7.0
。你也可以从依赖项中删除vue-template-compiler
- 它在 2.7 中不再需要。注意:如果你正在使用
@vue/test-utils
,你需要在依赖项中保留vue-template-compiler
,因为测试工具依赖于仅在此包中暴露的一些 API。检查你的包管理器锁定文件,以确保以下依赖项满足版本要求。它们可能是
package.json
中未列出的传递依赖项。vue-loader
:^15.10.0
vue-demi
:^0.13.1
如果没有,你需要删除
node_modules
和锁定文件并执行全新安装以确保它们被提升到最新版本。如果你之前使用的是
@vue/composition-api
,将来自它的导入更新到vue
。请注意,插件导出的某些 API(例如createApp
)在 2.7 中没有被移植。如果你在使用
<script setup>
时遇到未使用的变量 lint 错误,请将eslint-plugin-vue
更新到最新版本 (9+)。2.7 的 SFC 编译器现在使用 PostCSS 8(从 7 升级)。PostCSS 8 应该与大多数插件向后兼容,但升级可能会导致问题,如果你之前使用的是只能与 PostCSS 7 一起使用的自定义 PostCSS 插件。在这种情况下,你需要将相关插件升级到它们与 PostCSS 8 兼容的版本。
Vite
2.7 对 Vite 的支持是通过一个新的插件提供的:@vitejs/plugin-vue2。这个新插件需要 Vue 2.7 或更高版本,并且取代了现有的 vite-plugin-vue2。
请注意,新插件不处理特定于 Vue 的 JSX/TSX 转换,这是故意的。Vue 2 JSX/TSX 转换用于 Vite 在一个单独的专用插件中处理:@vitejs/plugin-vue2-jsx。
Volar 兼容性
2.7 版本改进了类型定义,因此不再需要安装 @vue/runtime-dom
仅仅为了 Volar 模板类型推断支持。现在您只需要在 tsconfig.json
中添加以下配置即可。
|
Devtools 支持
Vue Devtools 6.2.0 已添加对检查 2.7 Composition API 状态的支持,但扩展程序可能还需要几天时间才能在各自的发布平台上完成审核。
2.7 版本的影响
如前所述,2.7 是 Vue 2.x 的最后一个次要版本。在此版本发布后,Vue 2 进入 LTS(长期支持)阶段,从现在开始持续 18 个月,并且不再接收新功能。
这意味着 **Vue 2 将于 2023 年 12 月 31 日结束生命周期**。我们认为这应该为大多数生态系统迁移到 Vue 3 提供充足的时间。但是,我们也理解可能存在一些团队或项目无法在该时间线内升级,但仍然需要满足安全和合规性要求。如果您的团队预计在 2023 年底之后继续使用 Vue 2,请务必提前计划并了解您的选择:了解更多关于 Vue 2 LTS 和扩展支持。