Skip to content

icon 图标离线问题的 vite 插件解决方案 #7774

@tomgao365

Description

@tomgao365

今天学习 vben 项目,尝试局域网部署的时候,发现了项目中的图标都是调用 https://api.iconify.design 或其他的接口调用的。我立马想到了以前尝试 2 种方案。

方案 1:使用 addCollection@iconify/json*.json 文件直接添加到合集中,这样打包的时候直接加进去了。这种方式一般用的比较多,在 issues 中也能看到不少。

import carbon from '@iconify/json/json/carbon.json'
import el from '@iconify/json/json/el.json'
import fa from '@iconify/json/json/fa.json'
import lucide from '@iconify/json/json/lucide.json'
import { addCollection } from '@iconify/vue'
addCollection(el)
addCollection(carbon)
addCollection(fa)
addCollection(lucide)

方案 2:使用 Iconify API providers
自定义 API 服务,为此我以前写了个 @tomjs/vite-plugin-iconify 插件将 @iconify/json@iconify-json/lucide 这种独立的包在打包的时候直接复制到 dist 目录,并在 index.html 添加了本地地址。

<script>
IconifyProviders = {
      '': {
          resources: ['/npm/@iconify/json@2.2.454','https://api.iconify.design'],
          rotate: 1000,
      },
  };</script>

internal/vite-config 中安装 pnpm add -D @tomjs/vite-plugin-iconify 引用

import iconifyPlugin from '@tomjs/vite-plugin-iconify';

然后在 internal/vite-config/src/plugins/index.tsloadApplicationPlugins 方法中根据按需添加

   {
      condition: true,
      plugins: () => [iconifyPlugin({
        local: ['carbon', 'ep', 'fa','fa-solid', 'lucide','ant-design'],
      })],
    }

internal/vite-config 运行 pnpm tsdown 编译 vite-config

结束语:编译后预览,我发现有些 element 的图标一 直加载不出来,走的是 api 方式,我傻愣愣的调试了 2 个小时,最后发现是把 element-plus 的 ep 当成 el 缩写了,然后在 issues 中都没找到这个加载不出来的原因🥲,我还猜测是不是哪个库写死了 api 接口。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions