2020-06-04 15:48:23
按需引入Unocss图标库并启用Tree-shaking功能,可以有效减少打包体积,提升应用性能。以下是具体实现步骤:
首先需要安装Unocss核心库以及所需的图标集:
npm install -D unocss @iconify-json/[你的图标集名称]例如,若要使用Material Design Icons,则安装@iconify-json/mdi。

在uno.config.js或uno.config.ts文件中进行如下配置:
import { defineConfig } from 'unocss'import presetUno from '@unocss/preset-uno'import presetIcons from '@unocss/preset-icons'export default defineConfig({ presets: [ presetUno(), presetIcons({ extraProperties: { 'display': 'inline-block', // 确保图标正确显示 'vertical-align': 'middle', // 调整垂直对齐 }, }), ], // 配置扫描范围,提升构建性能 include: [/.vue$/, /.svelte$/, /.astro$/, /.jsx?$/, /.tsx?$/], exclude: [/node_modules/, /.git/, /.husky/, /.DS_Store/],})关键配置说明:

配置完成后,即可在组件中使用图标:
<template> <button class="i-mdi-home text-2xl"></button> <button class="i-mdi-account text-2xl"></button></template>使用格式为i-[图标集]-[图标名]。
Unocss本身支持Tree-shaking功能,但需要构建工具配合:
构建项目后,可通过以下方式验证:
使用打包分析工具:
Webpack:webpack-bundle-analyzer
Vite:rollup-plugin-visualizer
检查打包文件,确认只包含实际使用的图标

在uno.config.js中明确排除:
export default defineConfig({ exclude: [/node_modules/, /.git/, /.husky/, /.DS_Store/], // ...其他配置})2. 解决图标大小不一致问题方法一:使用extraProperties统一调整
presetIcons({ extraProperties: { 'display': 'inline-block', 'vertical-align': 'middle', 'width': '1em', 'height': '1em', },})方法二:使用CSS变量
:root { --mdi-icon-size: 1.2em; --heroicons-icon-size: 1em;}.i-mdi-* { font-size: var(--mdi-icon-size);}.i-heroicons-* { font-size: var(--heroicons-icon-size);}方法三:手动设置宽高类
<button class="i-mdi-home w-6 h-6"></button>3. 动态切换图标库实现步骤:
注意事项:
通过以上方法,可以有效优化Unocss图标库的体积,提升应用性能。