Iconify
Iconify 是一个项目的图标解决方案,包含所有流行的图标集,拥有超 20 多万的图标,支持按需引入。
本文记录在 vite 中如何使用 Iconify。
安装需要的依赖:
bash
pnpm add unplugin-auto-import unplugin-icons unplugin-vue-components自动导入
配置
在 vite.config.js 中添加如下配置:
js
import { defineConfig } from 'vite'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
export default defineConfig({
plugins: [
AutoImport({
resolvers: [
// 自动引入 mdi 图标组件,无需手动 import(js, ts 文件中)
IconsResolver({ prefix: false, enabledCollections: ['mdi'] }),
],
}),
Components({
resolvers: [
// 自动引入 mdi 图标组件,无需手动 import(.vue文件中)
IconsResolver({ prefix: false, enabledCollections: ['mdi'] }),
],
}),
// 自动安装用到的图标集
Icons({ autoInstall: true }),
],
})使用
按照上面进行配置,即可在项目中使用 Iconify 所有图标,无需手动引入:
名称规则为:<图标集id 图标名称 />
vue
<template>
<MdiAccount />
<MdiSettings />
</template>若图标为动态使用,还是需要手动引入,例如:
vue
<template>
<component :is="MdiAccount" />
</template>
<script setup>
import MdiAccount from '~icons/mdi/account'
<script>更改尺寸
可以在导入时添加参数来修改图标尺寸,例如:
js
import MidAccount from '~icons/mdi/account?width=2em&height=2em'解决 ts 报错
若在项目中使用了 ts,会报识别不到 ~icons··· 路径的错误,可以通过添加全局声明解决。
例如,在 global.d.ts 中添加如下声明:
ts
declare module '~icons' {
import type { DefineComponent } from 'vue'
const def: Record<string, DefineComponent>
export default def
}
declare module '~icons/*' {
import type { DefineComponent } from 'vue'
const def: DefineComponent
export default def
}自定义 svg 图标
需要在项目中新建一个目录,用于存放 svg 文件的图标,例如:src/assets/icons,然后添加如下配置:
js
import { defineConfig } from 'vite'
import Icons from 'unplugin-icons/vite'
import { FileSystemIconLoader } from 'unplugin-icons/loaders'
export default defineConfig({
plugins: [
Icons({
autoInstall: true,
// 配置本地 svg 图标
customCollections: {
svg: FileSystemIconLoader('./src/assets/icons', svg => {
// 为 svg 图标设置默认尺寸和对齐方式
return svg.replace(/^<svg /, '<svg width="1.2em" height="1.2em" style="vertical-align: middle" ')
}),
},
}),
],
})现在即可在项目中使用自定义的 svg 图标。
例如,本地有以下文件:src/assets/icons/github.svg
vue
<template>
<!-- 使用图标 -->
<IconGithub />
<!-- 更改尺寸 -->
<IconGithub width="2em" height="2em" />
</template>
<script setup>
import IconGithub from '~icons/svg/github'
<script>