阐述 Vue 3 中的 Global API 变更，例如 Vue.createApp() 和 Vue.extend() 的区别。

admin
Mon, 28 Jul 2025 18:07:10 +0000
Vue, api, global, vue

各位程序猿朋友们，大家好！我是你们的老朋友，今天咱们来聊聊 Vue 3 里的 Global API 那些事儿。别担心，咱们争取用最轻松幽默的方式，把这些重要的变化给捋清楚了。Vue 3 可是带来了不少新东西，Global API 算是改动比较大的一个地方，所以咱们得好好研究研究。 开场白：挥手告别老朋友，迎接新时代 在 Vue 2 的世界里，我们对 Vue.component、Vue.directive、Vue.mixin 这些 API 简直不要太熟悉。它们就像老朋友一样，天天见面，一起构建我们的 Vue 应用。但是，时代变了！Vue 3 就像一个搬家后的朋友，虽然还是那个人，但家里的摆设、甚至连开门的钥匙都换了。所以，我们也得跟着变，学会使用新的 API，才能继续和 Vue 3 愉快地玩耍。 正文：Global API 的“乾坤大挪移” Vue 3 最大的变化之一，就是把很多 Global API 变成了 app 实例上的方法。这听起来有点抽象，咱们来具体看看。 1. Vue.createApp()：应用的“新起点” 在 Vue 2 中，我们通常会这样创建一个 Vue 实例： // …

继续阅读“阐述 Vue 3 中的 Global API 变更，例如 Vue.createApp() 和 Vue.extend() 的区别。”

The post 阐述 Vue 3 中的 Global API 变更，例如 Vue.createApp() 和 Vue.extend() 的区别。 first appeared on 智猿学院-前后端，数据库，人工智能，云计算等领域前沿技术讲座.

各位程序猿朋友们，大家好！我是你们的老朋友，今天咱们来聊聊 Vue 3 里的 Global API 那些事儿。别担心，咱们争取用最轻松幽默的方式，把这些重要的变化给捋清楚了。Vue 3 可是带来了不少新东西，Global API 算是改动比较大的一个地方，所以咱们得好好研究研究。

开场白：挥手告别老朋友，迎接新时代

在 Vue 2 的世界里，我们对 Vue.component、Vue.directive、Vue.mixin 这些 API 简直不要太熟悉。它们就像老朋友一样，天天见面，一起构建我们的 Vue 应用。但是，时代变了！Vue 3 就像一个搬家后的朋友，虽然还是那个人，但家里的摆设、甚至连开门的钥匙都换了。所以，我们也得跟着变，学会使用新的 API，才能继续和 Vue 3 愉快地玩耍。

正文：Global API 的“乾坤大挪移”

Vue 3 最大的变化之一，就是把很多 Global API 变成了 app 实例上的方法。这听起来有点抽象，咱们来具体看看。

1. Vue.createApp()：应用的“新起点”

在 Vue 2 中，我们通常会这样创建一个 Vue 实例：

// Vue 2
import Vue from 'vue';
import App from './App.vue';

new Vue({
  el: '#app',
  render: h => h(App)
});

简单粗暴，直接 new 一个 Vue 实例，然后挂载到 DOM 上。但是，在 Vue 3 中，这种方式已经不推荐使用了。取而代之的是 Vue.createApp()：

// Vue 3
import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

app.mount('#app');

看起来只是换了个函数，但背后的意义却大不一样。createApp() 返回的是一个 应用实例，而不是 Vue 实例。这个应用实例拥有自己的配置，可以隔离不同的应用。这有什么好处呢？

隔离性更好： 假设你需要在同一个页面上运行多个 Vue 应用，使用 createApp() 可以确保它们之间不会互相干扰，避免出现命名冲突、数据污染等问题。

更灵活的配置： 应用实例可以配置全局组件、指令、mixin 等，这些配置只对该应用生效，不会影响其他应用。

方便测试： 可以更方便地对单个应用进行单元测试，而不用担心影响全局状态。

代码示例：多个 Vue 3 应用共存





// JavaScript
import { createApp } from 'vue';

// 应用 1
const app1 = createApp({
  data() {
    return {
      message: 'Hello from App 1!'
    };
  },
template: ' {{ message }} '
});

app1.mount('#app1');

// 应用 2
const app2 = createApp({
  data() {
    return {
      message: 'Greetings from App 2!'
    };
  },
template: ' {{ message }} '
});

app2.mount('#app2');

在这个例子中，我们在同一个页面上创建了两个独立的 Vue 应用。它们各自拥有自己的数据和模板，互不影响。

2. Vue.extend()：组件的“进化之路”

在 Vue 2 中，Vue.extend() 是一个非常重要的 API，它可以用来创建组件构造器。通过它可以扩展 Vue 的功能，创建可复用的组件。

// Vue 2
import Vue from 'vue';

const MyComponent = Vue.extend({
template: ' My Component '
});

// 注册组件
Vue.component('my-component', MyComponent);

但是，在 Vue 3 中，Vue.extend() 已经 不再推荐使用 了。取而代之的是直接使用 options API 或者 Composition API 定义组件。

Options API：熟悉的味道

Options API 仍然是 Vue 3 中定义组件的主要方式之一。它使用 data、methods、computed、watch 等选项来组织组件的逻辑。

// Vue 3 - Options API

My Component (Options API)



export default {
  data() {
    return {};
  },
  methods: {}
};


Composition API：全新的体验

Composition API 是 Vue 3 中引入的一种新的组件组织方式。它使用 setup() 函数来组织组件的逻辑，可以更灵活地复用代码。

// Vue 3 - Composition API

My Component (Composition API)



import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello from Composition API!');

    return {
      message
    };
  }
};


为什么 Vue.extend() 被“抛弃”了？

类型推断： Vue.extend() 在 TypeScript 中的类型推断比较困难，容易出现类型错误。而直接使用 options API 或 Composition API 可以更好地支持 TypeScript。

代码复用： Composition API 提供了更好的代码复用机制，可以将组件的逻辑提取成独立的函数，方便在不同的组件之间共享。

可读性： Composition API 可以将相关的逻辑组织在一起，提高代码的可读性和可维护性。

3. 其他 Global API 的“归宿”

除了 Vue.createApp() 和 Vue.extend() 之外，还有一些其他的 Global API 也发生了变化。

Vue.component、Vue.directive、Vue.mixin：这些 API 现在都变成了 app 实例上的方法。

// Vue 2
Vue.component('my-component', {
template: ' My Component '
});

// Vue 3
const app = createApp(App);
app.component('my-component', {
template: ' My Component '
});
app.directive('my-directive', {
  mounted(el) {
    el.focus();
  }
});
app.mixin({
  created() {
    console.log('Mixin created!');
  }
});

app.mount('#app');

Vue.config：这个 API 仍然存在，但是一些配置项的位置发生了变化。比如 Vue.config.productionTip 已经被移除。

Vue.filter: Vue 3 已经移除了内置的 filter。推荐使用计算属性或者方法来代替。

表格：Global API 的新旧对比

为了更清晰地了解 Global API 的变化，我们用一个表格来对比一下 Vue 2 和 Vue 3 的 API。

API | Vue 2 | Vue 3 | 说明
创建应用实例 | new Vue() | createApp(App) | Vue 3 使用 createApp() 创建应用实例，返回的是一个应用实例，而不是 Vue 实例。可以创建多个应用，实现隔离。
定义组件 | Vue.extend() | Options API / Composition API | Vue 3 不再推荐使用 Vue.extend()，推荐使用 options API 或者 Composition API 定义组件。
注册全局组件 | Vue.component() | app.component() | Vue 3 将 Vue.component() 变成了 app 实例上的方法。
注册全局指令 | Vue.directive() | app.directive() | Vue 3 将 Vue.directive() 变成了 app 实例上的方法。
注册全局混入 | Vue.mixin() | app.mixin() | Vue 3 将 Vue.mixin() 变成了 app 实例上的方法。
全局配置 | Vue.config | app.config (部分配置项已调整) | Vue 3 仍然保留了 Vue.config，但是一些配置项的位置发生了变化。
全局过滤器 | Vue.filter | 移除 | Vue 3 移除了 Vue.filter，推荐使用计算属性或者方法来代替。
全局异步错误处理 | Vue.config.errorHandler | app.config.errorHandler | 用于捕获应用中未处理的异步错误。
全局警告处理 | Vue.config.warnHandler | app.config.warnHandler | 用于自定义警告信息的处理方式。
全局自定义元素 | Vue.config.ignoredElements | app.config.compilerOptions.isCustomElement | 用于配置 Vue 忽略的自定义元素，避免将其作为未知标签处理。 需要注意的是，这里从Vue.config.ignoredElements 迁移到app.config.compilerOptions.isCustomElement ， 而且app.config.compilerOptions 只在完整构建版本中可用。 在webpack中使用时，需要配置 vue.config.js文件中的configureWebpack选项，配置compilerOptions。例如：configureWebpack: { compilerOptions: { isCustomElement: tag => tag.startsWith('ion-') } }。
全局静态方法 | 比如 Vue.nextTick、Vue.set、Vue.delete | nextTick (从 ‘vue’ 导入) 、reactive、unref | Vue 3 中 Vue.set 和 Vue.delete 已经被移除，直接使用 JavaScript 的原生方法即可。Vue.nextTick 需要从 vue 中导入。响应式相关方法如 reactive 和 unref 也需要从 vue 中导入。

代码示例：使用 app 实例注册组件、指令和 mixin

import { createApp } from 'vue';
import App from './App.vue';

const app = createApp(App);

// 注册全局组件
app.component('my-component', {
template: ' My Component '
});

// 注册全局指令
app.directive('my-directive', {
  mounted(el) {
    el.focus();
  }
});

// 注册全局混入
app.mixin({
  created() {
    console.log('Mixin created!');
  }
});

app.mount('#app');

总结：拥抱变化，迎接 Vue 3 的新世界

Vue 3 的 Global API 变化，虽然看起来有点让人不适应，但实际上是为了更好地支持现代 Web 开发的需求。通过 createApp() 创建应用实例，可以实现更好的隔离性和灵活性。放弃 Vue.extend()，拥抱 options API 和 Composition API，可以提高代码的可读性和可维护性。

所以，让我们拥抱变化，积极学习 Vue 3 的新特性，一起迎接 Vue 3 的新世界吧！

额外补充：一些实用的小技巧

迁移工具： Vue 官方提供了一个迁移工具，可以帮助你将 Vue 2 的代码迁移到 Vue 3。

官方文档： Vue 3 的官方文档非常详细，是学习 Vue 3 的最佳资源。

社区资源： Vue 社区非常活跃，有很多优秀的教程和开源项目可以参考。

结束语：一起进步，共同成长

好了，今天的分享就到这里。希望通过今天的讲解，大家对 Vue 3 的 Global API 变化有了更清晰的了解。记住，学习是一个不断进步的过程，让我们一起努力，共同成长！如果大家有什么问题，欢迎随时提问。下次再见！