一、主流框架搭配
了解生态演进中形成的「主流 / 推荐搭配」,当然技术上完全可以灵活组合:
1、Vue 2 + Webpack 4:历史主流
Vue 2 发布于 2016 年,彼时 Vite 尚未诞生(Vite 2020 年发布),而 Webpack 是当时前端工程化的绝对主流。
- Vue 官方提供的 @vue/cli(Vue CLI)核心基于 Webpack 构建,默认适配 Vue 2,且 Webpack 4 是
Vue CLI 4.x 的标配(Webpack 5 后期也支持,但生态适配慢); - Webpack 兼容老浏览器、插件生态完善,契合 Vue 2 面向广泛场景的定位,因此成为 Vue 2 项目的 "默认选择"。
2、Vue 3 + Vite:现代推荐
Vue 3 发布于 2020 年,同期 Vite 正式推出,且 Vue 核心团队主导了 Vite 的开发,天然对 Vue 3 做了深度优化:
- Vite 基于 ESModule 原生加载、按需编译,开发环境启动 / 热更新速度远快于 Webpack;
- Vue 3 的单文件组件(SFC)编译逻辑、
<script setup>语法等,在 Vite 中支持更原生、更高效; - Vue 官方文档已将 Vite 作为 Vue 3 项目的首选构建工具,替代了过去的 Vue CLI。
3、灵活组合的可能性
际开发中可根据场景灵活选择(比如 Vue 3 项目需兼容 IE 则选 Webpack,Vue 2 项目想提速则试 Vite)。
示例:
- Vue 3 用 Webpack:可通过 @vue/cli@5.x 创建 Vue 3 项目(Vue CLI 5 已支持 Vue 3 + Webpack 5);
- Vue 2 用 Vite:需安装 vite-plugin-vue2 插件适配 Vue 2 的 SFC 编译逻辑。
二、Vue CLI 与 Vite 的核心区别

三、Vue3 与 Vue2 的核心区别
Vue3 与 Vue2 的核心区别贯穿底层架构、响应式系统、组件语法、性能、工程化等多个维度,本质是 Vue3 为适配现代前端开发(大型应用、更好的 TypeScript 支持、更高性能)做的全面重构,以下是核心差异的梳理:
1、底层架构:从 "单体" 到 "模块化"
Vue2 的源码是单体式架构,所有功能(响应式、编译、运行时)耦合在一个包中,即使只用到部分功能,也需引入完整代码,且难以做按需扩展;
Vue3 采用 Monorepo + 模块化架构(基于 packages 拆分):
- 核心功能拆分为独立包(如 @vue/reactivity 响应式模块、@vue/compiler-sfc 编译模块),可单独引用(比如非
Vue 项目也能用 Vue3 的响应式系统); - 支持按需引入,打包体积更小(比如只引入运行时核心,不包含编译器);
- 架构分层更清晰,便于维护和扩展(比如适配不同渲染目标:Web、小程序、SSR)。
2、响应式系统:从 Object.defineProperty 到 Proxy
这是最核心的底层差异,直接决定了数据监听的能力:

示例对比:
javascript
// Vue2 中新增属性无法响应式,需手动 set
this.obj.newKey = 123; // 无响应
this.$set(this.obj, 'newKey', 123); // 需手动触发
// Vue3 中原生支持,无需额外操作
this.obj.newKey = 123; // 自动响应
this.arr[0] = 123; // 数组索引修改也响应
3、组件语法:组合式 API(Composition API)vs 选项式 API(Options API)
Vue2 主推 Options API(选项式 API),Vue3 新增 Composition API(组合式 API)并作为推荐方案,同时兼容 Options API:

示例对比:
javascript
<!-- Vue2 Options API:逻辑按选项拆分 -->
<script>
export default {
data() {
return { count: 0 };
},
methods: {
increment() { this.count++; }
},
watch: {
count(val) { console.log(val); }
}
};
</script>
<!-- Vue3 Composition API:逻辑按功能聚合 -->
<script setup>
import { ref, watch } from 'vue';
// 计数功能相关逻辑聚合
const count = ref(0);
const increment = () => { count.value++; };
watch(count, (val) => { console.log(val); });
</script>
补充:Vue3 也支持 Options API(兼容 Vue2 写法),但推荐在复杂组件中用 Composition API,简单组件仍可沿用 Options API。
4、组件核心能力增强
(1) 模板语法
- 多根节点(Fragment):Vue2 组件模板必须有且只有一个根节点,Vue3 支持多根节点(无需外层 div 包裹);
javascript
<!-- Vue3 支持,Vue2 报错 -->
<template>
<div>节点1</div>
<div>节点2</div>
</template>
- Teleport(瞬移):Vue3 新增,可将组件内容渲染到 DOM 树的任意位置(比如弹窗渲染到 body 下,解决层级问题),Vue2
需手动操作 DOM 实现; - Suspense:Vue3 新增,支持异步组件的加载状态管理(等待异步组件加载时显示 fallback 内容),Vue2 无原生支持;
- v-model 重构:Vue2 的 v-model 存在语法歧义(与 .sync 修饰符混用),Vue3 统一了 v-model
语法,支持多 v-model 绑定:
javascript
<!-- Vue2:v-model 等价于 :value + @input,多绑定需用 .sync -->
<Child :value="name" @input="name=$event" />
<Child :age.sync="age" />
<!-- Vue3:v-model 可指定参数,支持多绑定 -->
<Child v-model:name="name" v-model:age="age" />
(2)生命周期钩子
Vue3 对生命周期钩子做了调整(适配 Composition API),且命名更语义化:

核心变化:Vue3 废弃了 beforeDestroy/destroyed,改为 beforeUnmount/unmounted,更贴合 "组件卸载" 的语义。
5、性能优化:全方位提升
Vue3 通过架构重构和编译优化,性能远优于 Vue2:
- 打包体积:Tree-shaking 支持更完善,生产包体积比 Vue2 小约 40%;
- 渲染性能:虚拟 DOM 重写,编译阶段做更多优化(比如静态节点提升、PatchFlags
标记动态节点),更新时只对比动态内容,渲染速度提升约 55%; - 内存占用:响应式系统懒代理,内存占用减少约 50%;
- SSR 性能:Vue3 的 SSR 渲染速度提升约 2~3 倍。
6、TypeScript 支持
Vue2 对 TS 的支持是 "后天适配",需借助 vue-class-component 等库,类型推导不完整,开发体验差;
Vue3 从源码层面用 TS 编写,天然支持 TS,Composition API 与 TS 结合更友好,类型推导精准,比如:
javascript
<script setup lang="ts">
import { ref, defineProps } from 'vue';
// 类型推导自动生效
const count = ref(0); // count 被推导为 Ref<number>
// 组件 props 类型定义更简洁
const props = defineProps<{
name: string;
age?: number;
}>();
</script>
7、其他核心差异
(1)全局 API 重构
Vue2 的 Vue.prototype、Vue.use 等全局 API 易造成全局污染,Vue3 改为实例级 API(如 createApp),每个应用实例独立:
javascript
// Vue2
import Vue from 'vue';
Vue.prototype.$axios = axios;
new Vue({ el: '#app' });
// Vue3
import { createApp } from 'vue';
const app = createApp(App);
app.config.globalProperties.$axios = axios;
app.mount('#app');
(2)过滤器(Filter)
Vue2 支持过滤器,Vue3 废弃(推荐用计算属性 / 函数替代);
(3)指令
Vue3 新增 v-memo 指令(缓存模板片段,优化高频更新),v-on 修饰符语法调整(更简洁)。
8、总结

简单来说:Vue2 是 "够用就好" 的轻量框架,适合中小型项目;Vue3 是 "兼顾性能与可维护性" 的现代框架,适配大型应用和团队协作,同时向下兼容 Vue2 的核心语法,迁移成本可控。