起因
在开发一些个人项目的时候,我非常喜欢使用一个开源图标库Remix Icon,这次在开发文件服务器的时候也使用了这个库,我只是单纯的觉得caddy和nginx自带的文件服务UI不好看,所以就做了一个简易版本的。
当我按照平常一样的使用方式:
安装
npm install remixicon --save使用
import 'remixicon/fonts/remixicon.css'文件服务一般都是非常小和简单的页面的,当我打包了之后查看打包文件大小,其中remixicon占用了非常大的空间。

改进
Remix Icon中在vue3中还有专门的引入方式:
安装
npm install @remixicon/vue使用
<script setup lang="ts">import { RiHeartFill } from "@remixicon/vue";</script>
<template> <RiHeartFill size="36px" color="red" className="my-icon" /></template>这是最普通的使用方式,但是我的使用场景比较复杂,我需要根据后台发来的数据来判断应该显示什么图标。
示例
import { RiFolder3Fill, RiImageFill, RiFileGifFill,} from "@remixicon/vue"
const iconClass = { dir: RiFolder3Fill, png: RiImageFill, gif: RiImageFill,}/** * 获取对应文件类型的图标样式 * @param {string} extname 文件后缀名 * @param {string} type 文件类型: image | doc | music | video | audio | code | default5 collapsed lines
* @returns */export const getIconClass = ({ extname, type }) => { return { svg: iconClass[extname], color: `text-color-${type}` }}<script setup> function renderIcon({extname, type}) { let iconClass = getIconClass({extname, type}) return () => h(iconClass.svg, { class: iconClass.color, size: '20px' }); }</script><template> <component :is="renderIcon({ extname: item.ext, type: item.type })"></component></template>这样就这可以根据传入的值来判断需要显示什么图标了。
改用这种方式来引入Svg图标之后,再来看看打包的大小变化吧,舒服多了。
