Skip to content

按需自动导入组件与图标

自动导入组件

自动导入 vue 和 @vueuse/core 的 API ,并使用 ElementPlusResolver 解析器自动导入 Element Plus 组件。

  • 安装 unplugin-vue-componentsunplugin-auto-import 两款插件

    sh
    pnpm add -D unplugin-vue-components unplugin-auto-import
  • vite.config.ts 中添加以下配置

    ts
    import 
    AutoImport
    from 'unplugin-auto-import/vite'
    import {
    ElementPlusResolver
    } from 'unplugin-vue-components/resolvers'
    import
    Components
    from 'unplugin-vue-components/vite'
    import {
    defineConfig
    } from 'vite'
    export default
    defineConfig
    ({
    // ...
    plugins
    : [
    // ...
    AutoImport
    ({
    imports
    : ['vue', '@vueuse/core'],
    resolvers
    : [
    ElementPlusResolver
    ()],
    }),
    Components
    ({
    resolvers
    : [
    ElementPlusResolver
    (),
    ], }), ], })

自动导入图标

unplugin-icons

如果只想使用一些图标集并且不想下载整个集合,可以使用 @iconify-json/[collection-id] 单独安装。

下面是安装 maki 图标集的示例。

  • 安装图标集

    sh
    pnpm add -D @iconify-json/maki
  • vite-plugin-icons 迁移,使用 resolver 解析器进行自动导入

    ts
    import 
    AutoImport
    from 'unplugin-auto-import/vite'
    import {
    FileSystemIconLoader
    } from 'unplugin-icons/loaders'
    import
    IconsResolver
    from 'unplugin-icons/resolver'
    import
    Icons
    from 'unplugin-icons/vite'
    import {
    ElementPlusResolver
    } from 'unplugin-vue-components/resolvers'
    import
    Components
    from 'unplugin-vue-components/vite'
    import {
    defineConfig
    } from 'vite'
    export default
    defineConfig
    ({
    // ...
    plugins
    : [
    // ...
    AutoImport
    ({
    imports
    : ['vue', '@vueuse/core'],
    resolvers
    : [
    ElementPlusResolver
    ()],
    }),
    Components
    ({
    resolvers
    : [
    ElementPlusResolver
    (),
    IconsResolver
    ({
    prefix
    : 'icon',
    enabledCollections
    : ['ep', 'maki'],
    customCollections
    : ['sprite'],
    }) ], }),
    Icons
    ({
    customCollections
    : {
    sprite
    :
    FileSystemIconLoader
    ('./sprite',
    svg
    =>
    svg
    .
    replace
    (/^<svg /, '<svg fill="currentColor" ')),
    }, }), ], })
  • 使用 {prefix}-{collection}-{icon} 自动导入

    md
      <icon-ep-UserFilled />
  • 使用 ~icons/{collection}/{icon} 导入图标名称并直接将它们用作组件

    md
    <script lang="ts" setup>
    import IconMakiAnimalShelter from '~icons/maki/animal-shelter'
    </script>
    
    <template>
      <ElInput :prefix-icon="IconMakiAnimalShelter" placeholder="Search Icons" />
    </template>
    找不到模块“~icons/maki/animal-shelter”或其相应的类型声明?

    tsconfig.json 中添加以下配置

    json
    {
      "compilerOptions": {
        "types": [
          "unplugin-icons/types/vue"
        ]
      }
    }

使用示例

基于 MIT 许可发布