vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3组件注册方式

Vue3组件注册的四种常见方式详解

作者:@赵士杰

在Vue3的项目开发中,组件化是一个核心特性,它可以让我们将页面拆分成多个小的、可复用的组件,从而提高代码的可维护性和可复用性,本文将详细介绍Vue3中四种常见的组件注册方式,希望能帮助你更好地掌握Vue3的组件注册技巧,需要的朋友可以参考下

引言

在 Vue3 的项目开发中,组件化是一个核心特性,它可以让我们将页面拆分成多个小的、可复用的组件,从而提高代码的可维护性和可复用性。而在使用 Vue 组件之前,我们需要先对其进行 “注册”,这样 Vue 才能在渲染模板时找到其对应的实现。本文将详细介绍 Vue3 中四种常见的组件注册方式,希望能帮助你更好地掌握 Vue3 的组件注册技巧。

方式一:全局注册

全局注册是指在项目的入口文件 main.jsmain.ts 文件中,通过 Vue 提供的 .component() 方法将组件注册为全局组件。一旦组件被全局注册,就可以在任何其他 Vue 组件中直接使用,无需手动导入。

import { createApp } from 'vue'
import App from './App.vue'
import MyComponent from './components/MyComponent.vue'

const app = createApp(App)

// 全局注册组件
app.component('MyComponent', MyComponent)

app.mount('#app')

方式二:局部注册

局部注册是指在单个 Vue 组件内部使用 import 导入组件并注册,这种方式注册的组件只能在当前组件中使用。

<template>
  <div>
    <MyComponent />
  </div>
</template>

<script setup>
import MyComponent from './components/MyComponent.vue'
</script>

方式三:插件注册

插件注册是利用 Vue 的插件机制将一组 Vue 组件注册为全局组件。这种方式适合于一次性注册多个组件,提高代码的复用性和可维护性。

MyPlugin.js 中通过 install 方法会向 Vue 应用程序中注册 MyButtonMyInput 自定义组件:

// MyPlugin.js

// 组件集合对象 <组件名称,组件定义对象>
const components: Record<string, object> = {
  MyButton,
  MyInput
}

export default {
  // 在 Vue 应用中注册组件
  install(app: App) {
    Object.keys(components).forEach((name) => {
      app.component(name, components[name])
    })
  },
}

main.js 中,通过 app.use(MyPlugin) 将插件注册到应用中,之后就可以在任何地方使用插件中的组件。

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

const app = createApp(App)

// 插件注册
app.use(MyPlugin)

app.mount('#app')

方式四:unplugin-vue-components 自动导入组件

unplugin-vue-components 是一个用于自动导入 Vue 组件的插件,它可以自动扫描项目中使用的组件,并在需要的地方自动导入,减少了手动 import 的工作量。同时,它还支持第三方组件库的自动导入,像 Element Plus、Ant Design Vue、Vant 等流行组件库都能轻松适配,并且对 TypeScript 有良好的支持,能自动生成类型声明文件,确保在 TypeScript 项目中类型检查的准确性。

GitHub 项目地址:https://github.com/unplugin/unplugin-vue-components

使用示例

安装 unplugin-vue-components 插件:

# npm 安装
npm install unplugin-auto-import --save-dev

# pnpm 安装
pnpm add -D unplugin-vue-components

# yarn 安装
yarn add unplugin-vue-components -D

在 Vite 项目 vite.config.ts 中添加 unplugin-vue-components 配置:

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import Components from 'unplugin-vue-components/vite';

export default defineConfig({
  plugins: [
    vue(),
    // 自动导入组件
    Components({
      dirs: ['src/components'],
    }),
  ],
});

在完成 unplugin-vue-components 的配置后,就可以在项目中直接使用组件,无需手动导入:

<template>
  <div>
    <MyButton />
  </div>
</template>

<script setup>
// 无需手动导入MyButton组件
</script>

如果配置了第三方组件库的解析器,例如 ElementPlus,也可以直接使用 ElementPlus 的组件:

<template>
  <div>
    <el-button type="primary">Element Plus按钮</el-button>
  </div>
</template>

<script setup>
// 无需手动导入ElButton组件
</script>

这样,unplugin-vue-components插件会自动识别并导入项目中使用的组件,大大简化了组件的使用过程。

配置项说明

unplugin-vue-components 插件的配置项如下:

// 扫描多个目录
dirs: ['src/components', 'src/views/shared']
// 同时支持 .vue、.jsx 和 .tsx 文件
extensions: ['vue', 'jsx', 'tsx']
// 仅扫描 src/components 目录下的 .vue 文件
globs: ['src/components/*.vue']

// 使用以 ! 开头的负匹配模式排除某些组件不被注册
globs: ['src/components/**/*.vue', '!src/components/**/*.test.vue']
// 关闭子目录扫描
deep: false
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

resolvers: [
  ElementPlusResolver(),  // 自动导入 ElementPlus 组件
]

常用的第三方组件库解析器有:

// 关闭类型声明文件生成
dts: false,

// 自定义类型声明文件路径
dts: 'src/types/components.d.ts',
// 启用命名空间
directoryAsNamespace: true

// 组件路径:src/components/admin/Button.vue
// 使用方式:<AdminButton />
// 目录结构:src/components/admin/AdminButton.vue
// 折叠后:<AdminButton /> 而非 <AdminAdminButton />
collapseSamePrefixes: true
// 组件路径:src/components/admin/Button.vue
// 全局命名空间:['admin']
// 使用方式:<Button /> 而非 <AdminButton />
globalNamespaces: ['admin']
// 启用Vue 2指令支持(需安装@babel/parser)
directives: true
// 添加自定义前缀
importPathTransform: (path) => `@/components/${path}`
// 允许同名组件覆盖
allowOverrides: true
include: [/\.vue$/, /\.vue\?vue/, /\.vue\.[tj]sx?\?vue/],
exclude: [/[\\/]node_modules[\\/]/, /[\\/]\.git[\\/]/, /[\\/]\.nuxt[\\/]/]
// 排除所有以Async开头的组件
excludeNames: [/^Async.+/]
// 明确指定Vue 3版本
version: 3
// 为Element Plus组件提供类型支持
types: [{ from: 'element-plus', names: ['ElButton', 'ElInput'] }]

到此这篇关于Vue3组件注册的四种常见方式详解的文章就介绍到这了,更多相关Vue3组件注册方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文