【vite插件】iconify字体图标离线加载

安装插件包

yarn add @iconify/iconify
yarn add @purge-icons/generated vite-plugin-purge-icons @iconify/json -D

# @iconify/json 中存放了离线字体

# vite-plugin-purge-icons 提供了离线扫描功能
# 扫描vue、ts、js等文件中插件正则匹配到的字体图标;
# 正常情况下,扫到的图标可以通过@iconify/json离线图标库加载
# 没扫到的图标会调用官方api远程加载

在编译阶段按需加载本地离线图标(注意:字体库会导致打包体积变大)

  1. 抽取要离线加载的json图标数据文件 iconData.json (在离线扫描失效时使用)
{
  "ep:": ["add-location", "aim", "alarm-clock", "apple"],
  "fa:": ["home", "address-book", "address-book-o", "address-card"],
  "fa-solid:": ["abacus", "ad", "address-book"]
}
  1. vite.config.js 配置插件
import PurgeIcons from 'vite-plugin-purge-icons'
import iconData form './data/iconData.json'

type ValueType<T> = [T, T[]]

// 提前加载本地图标数据
// 依赖 @iconify/json 包中提供的的数据
const preloadOfflineIcons = (iconData): string[] => {
  return Object.entries(iconData).reduce((a: string[], [k, v]: ValueType<string>) => {
    a = a.concat(v.map((i) =>  k+i))
    return a
  }, [])
}


// included中配置的图标不经过文件扫描,可通过@iconify/json处理后直接离线加载
export default {
  plugins: [
    PurgeIcons({
      included: preloadOfflineIcons()
    })
  ]
}

  1. main.js 加入 iconify 图标支持
import { createApp } from 'vue'
import App from './App.vue'

import '@purge-icons/generated' // <-- This

createApp(App).mount('#app')
  1. 组件中使用
<!-- 
 注意:未能离线加载的图标将调用官方api来加载 
  正常情况不需要在vite.config.js中配置included,因为会自动扫描vue等文件进行离线加载 
  只有当 data-icon 中的值是通过动态绑定,导致扫描时正则匹配失效,此时若需离线加载,则需配合included使用
-->
<span class="iconify" data-icon="fa:home"></span>
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值