Vue2 与 Vue3 插件 API 核心差异

安装方式变化
Vue2 插件通过 Vue.use(Plugin) 全局安装,直接修改 Vue 的原型链。Vue3 使用 app.use(Plugin),插件接收应用实例 (app) 作为参数,通过 app.config.globalProperties 暴露全局属性,避免污染原型链。

Composition API 支持
Vue3 插件需兼容 Composition API。若插件提供可复用的逻辑(如全局状态),需通过 provide/inject 或返回响应式对象,而非依赖 this 上下文。

生命周期调整
Vue3 移除 beforeCreatecreated 钩子,合并为 setup()。插件若依赖这些钩子,需迁移逻辑到 setupbeforeMount/mounted

组件关联差异

全局组件注册
Vue2 通过 Vue.component() 注册全局组件。Vue3 需通过 app.component() 注册,且需显式传递应用实例给插件。

局部组件作用域
Vue3 的 setup 函数中,组件需通过 components 选项显式注册局部组件,或使用 <script setup> 语法糖自动关联。

异步组件语法
Vue3 废弃 Vue.component('async', resolve => {...}) 写法,改用 defineAsyncComponent 工厂函数:

import { defineAsyncComponent } from 'vue'
const AsyncComp = defineAsyncComponent(() => import('./Component.vue'))

开发注意事项

响应式系统升级
Vue3 使用 Proxy 替代 Object.defineProperty。插件若依赖 Vue2 的响应式实现(如手动触发更新),需改用 reactive/ref 等 Composition API。

Tree-shaking 优化
Vue3 插件应支持按需引入。推荐使用 ES 模块导出独立功能,例如:

// 插件入口文件
export { default as FeatureA } from './FeatureA.vue'
export { useFeatureB } from './featureB.js'

TypeScript 集成
Vue3 对 TS 支持更完善。插件应提供类型声明,尤其是全局属性扩展:

declare module '@vue/runtime-core' {
  interface ComponentCustomProperties {
    $myPluginMethod: () => void
  }
}

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐